字符编码,存储引擎及MySQL字段类型相关知识点
字符编码,存储引擎及MySQL字段类型相关知识点
一、字符编码
1.在终端输入\s,查看数据库的基本信息(当前用户,版本,编码,端口号)
2.默认的配置文件是my-default.ini
拷贝上述的文件,然后将文件程序命名为my.ini
添加字符编码相关配置:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
配置文件中涉及到了MySQL相关的配置的修改,那么需要重启服务器才可以生效
ps:我们可以利用配置文件偷懒,将用户名和密码写入配置文件中 ,后续登录的时候就不需要进行输入密码了
二、数据库存储引擎
1.查看所有的存储引擎
我们可以理解存储引擎就是针对相同数据采取不同的存取策略
show engines;
ps:MySQL中默认忽略大小写
2.需要掌握 的存储引擎
1.MyISAM
MySQL5.5之前默认的存储引擎
存取速度快,但是功能少,安全性较低
2.InnoDB
MySQL5.5之后的默认存储引擎
支持事物,行锁,外键等操作,速度没有MyISAM快,但是安全性更高
3.Memory
基于内存的存储引擎,仅应用于临时表的数据存取,但是断电立刻丢失
4.BlackHole
任何写入的数据会立刻消失,类似于垃圾站
3.不同存储引擎之间底层文件的区别
mysql> create database db1;
Query OK, 1 row affected (0.00 sec)
mysql> use db1;
Database changed
mysql> create table t1(id int) engine=innodb;
Query OK, 0 rows affected (0.02 sec)
mysql> create table t2(id int) engine=myisam;
Query OK, 0 rows affected (0.04 sec)
mysql> create table t3(id int) engine=memory;
Query OK, 0 rows affected (0.01 sec)
mysql> create table t4(id int) engine = blackhole;
Query OK, 0 rows affected (0.04 sec)
mysql> insert into t1 values(1);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t2 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t3 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t4 values(1);
Query OK, 1 row affected (0.00 sec)
1.Innodb
.frm --->> 表结构
.ibd --->> 表数据(表索引)
2.myisam三个文件
.frm ---->> 表结构
.MYD ---->> 表数据
.MYI ---->> 表索引
3.memory一个文件
.frm ---->> 表结构
4.blackhole一个文件
.frm ----->> 表结构
三、创建表的完整语法
create table 表名(
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件
);
1.字段名和字段类型是必须的
2.数字和约束条件是可选的(可有可无)
3.约束条件可以写多个,也可以一个,多个用逗号隔开就好了
4.最后一行不能加逗号
四、字段类型之整型
tinyint 1bytes
smallint 2bytes
int 4bytes
bigint 8bytes
1.验证整型是否自带负号
mysql> create table t5(id tinyint);
Query OK, 0 rows affected (0.04 sec)
mysql> insert into t5 values(-129),(256);
Query OK, 2 rows affected, 2 warnings (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 2
mysql> desc t5;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | tinyint(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
1 row in set (0.01 sec)
2.自定义移除符号
# unsigned 约束条件,意思是说不需要负号
mysql> create table t6(id tinyint unsigned);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t6 values(-129),(256);
Query OK, 2 rows affected, 2 warnings (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 2
mysql> select * from t6;
+------+
| id |
+------+
| 0 |
| 255 |
+------+
2 rows in set (0.00 sec)
插入的数据超出了数据类型的范围,不应该让其插入并自动修改,没有意义,数据库应该直接报错
我们可以修改my.ini配置文件就可以完成这样的设想
[mysqld]
sql_mode='strict_trans_tables'
mysql> use db1;
Database changed
mysql> insert into t6 values(-8);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
五、字段类型之浮点型
float,double,decimal三者都可以存储浮点型数据,但是各自的精确度不一致
mysql> create table t7(id float(60,20));
Query OK, 0 rows affected (0.02 sec)
mysql> create table t8(id double(60,20));
Query OK, 0 rows affected (0.02 sec)
mysql> create table t9(id decimal(60,20));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t7 values(1.11111111111111111111);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t8 values(1.11111111111111111111);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t9 values(1.11111111111111111111);
Query OK, 1 row affected (0.04 sec)
mysql> select * from t7;
+------------------------+
| id |
+------------------------+
| 1.11111116409301760000 |
+------------------------+
1 row in set (0.00 sec)
mysql> select * from t8;
+------------------------+
| id |
+------------------------+
| 1.11111111111111120000 |
+------------------------+
1 row in set (0.00 sec)
mysql> select * from t9;
+------------------------+
| id |
+------------------------+
| 1.11111111111111111111 |
+------------------------+
1 row in set (0.00 sec)
# 精确度:float < double < decimal
# 一般情况下,float足够使用了,如果想要追求精确,可以用字符串代替
六、字段类型之字符类型
char:定长
char(4) 最多存储四个字符,超出就报错,不够四个,空格来填
varchar:变长
varchar(4) 最多存储四个字符,超出就报错,不够有几位存几位
mysql> insert into t10 values(1,'jason1');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into t11 values(1,'jason1');
ERROR 1406 (22001): Data too long for column 'name' at row 1
# 位数超出就报错
char与varchar
char;整存整取,速度快,浪费存储空间
varchar:节省存储空间,存取数据的速度慢于char
默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格,然后在读取的时候又会自动将填充的空格移除,如果想取消该机制,需要
sql_mode
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
mysql> create table t16(id int,name char(4));
Query OK, 0 rows affected (0.02 sec)
mysql> create table t17(id int,name varchar(4));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t16 values(2,'J');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t17 values(1,'tom');
Query OK, 1 row affected (0.01 sec)
mysql> select char_length(name) from t17;
+-------------------+
| char_length(name) |
+-------------------+
| 3 |
+-------------------+
1 row in set (0.00 sec)
七、数字的含义
数字在很多地方都是用来表示限制存储数据的长度
但是在整型中数字却不是用来限制存储长度,而是控制展示的长度
以后写整型无需添加数字
create table t18(id int(3));
insert into t18 values(1),(123),(123456);
create table t19(id int(3) zerofill);
insert into t19 values(1),(123),(123456);
mysql> select * from t19;
+--------+
| id |
+--------+
| 001 |
| 123 |
| 123456 |
+--------+
3 rows in set (0.00 sec)
八、字段类型之枚举与集合
枚举(多选一):
mysql> create table t12(
-> id int,
-> name varchar(32),
-> gender enum('male','female')
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t12 values(1,'jason','male');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t12;
+------+-------+--------+
| id | name | gender |
+------+-------+--------+
| 1 | jason | male |
+------+-------+--------+
1 row in set (0.00 sec)
集合(多选多):
mysql> create table t13(
-> id int,
-> name varchar(13),
-> hobbies set('dance','sing','drew')
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t13 values(1,'jia','dance,sing,drew');
Query OK, 1 row affected (0.04 sec)
mysql> select * from t13;
+------+------+-----------------+
| id | name | hobbies |
+------+------+-----------------+
| 1 | jia | dance,sing,drew |
+------+------+-----------------+
1 row in set (0.00 sec)
九、字段类型之日期类型
datetime ---->> 年月日时分秒
date ---->> 年月日
time ---->> 时分秒
year ---->> 年
mysql> create table t15(
-> id int,
-> name varchar(32),
-> register_time datetime,
-> birthday date,
-> study_time time,
-> work_time year
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t15 values(1,'jia','2000-11-11 11:11:11','1998-01-21','11:11:11','2000');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t15;
+------+------+---------------------+------------+------------+-----------+
| id | name | register_time | birthday | study_time | work_time |
+------+------+---------------------+------------+------------+-----------+
| 1 | jia | 2000-11-11 11:11:11 | 1998-01-21 | 11:11:11 | 2000 |
+------+------+---------------------+------------+------------+-----------+
1 row in set (0.00 sec)
字符编码,存储引擎及MySQL字段类型相关知识点的更多相关文章
- 字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件
字符编码 查看MySQL默认编码命令:\s """ 如果是5.X系列 显示的编码有多种 latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4 ...
- MySQL字段类型与操作
MYSQL字段类型与操作 字符编码与配置文件 操作 代码 功能 查看 \s 查看数据库基本信息(用户.字符编码) 配置(配置文件层面) my-default.ini windows下MySQL默认的配 ...
- 存储引擎,MySQL中的数据类型及约束
存储引擎,MySQL中的数据类型及约束 一.存储引擎 1.不同的数据应该有不同的处理机制 2.mysql存储引擎 Innodb:默认的存储引擎,查询速度叫myisam慢,但是更安全 支持事务, ...
- (转)MySQL字段类型详解
MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...
- MySQL 字段类型介绍
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...
- MySql 字段类型对应 Java 实体类型
前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...
- MySQL技术内幕InnoDB存储引擎(三)——文件相关
构成MySQL数据库和InnoDB存储引擎表的文件类型有: 参数文件:MySQL实例运行时需要的参数就是存储在这里. 日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件. socket文件 ...
- powerdesigner12.5 设置表字符集和存储引擎
powerdesigner12.5在做建模的时候发现没有找到哪儿设置表的字符集和存储引擎.于是研究了一番. 在菜单上方选择 Database => Edit Current DBMS 然后选 ...
- 使用Merge存储引擎实现MySQL分表
一.使用场景 Merge表有点类似于视图.使用Merge存储引擎实现MySQL分表,这种方法比较适合那些没有事先考虑分表,随着数据的增多,已经出现了数据查询慢的情况. 这个时候如果要把已有的大数据量表 ...
- 存储引擎:MySQL系列之七
一.MyISAM存储引擎 缺点: 不支持事务 最小粒度锁:表级 读写相互阻塞,写入不能读,读时不能写 不支持MVCC(支持多版本并发控制机制) 不支持聚簇索引 不支持数据缓存 不支持外键 崩溃恢复性较 ...
随机推荐
- Hugging Face发布diffuser模型AI绘画库初尝鲜!
作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 TensorFlow 实战系列:https://www.showmeai ...
- DTSE Tech Talk | 第10期:云会议带你入门音视频世界
摘要:本期直播主题是<云会议带你入门音视频世界>,华为云媒体服务产品部资深专家金云飞,与开发者们交流华为云会议在实时音视频行业中的集成应用,帮助开发者更好的理解华为云会议及其开放能力. 本 ...
- 如何在JavaScript中使用for循环
前言 循环允许我们通过循环数组或对象中的项并做一些事情,比如说打印它们,修改它们,或执行其他类型的任务或动作.JavaScript有各种各样的循环,for循环允许我们对一个集合(如数组)进行迭代. 在 ...
- vue3 结合 element-plus 框架实现增删改查功能(不连接数据库)
一.效果图 二.代码 2.1.导入依赖(已经安装过node.js) npm install element-plus --save 注意:要是安装失败,可以使用淘宝镜像进行下载,如下: 2.2.设置淘 ...
- mindxdl--common--utils.go
// Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common define co ...
- Kubernetes_从零开始搭建k8s集群(亲测可用)
一.前言 本文讲述从零开始搭建k8s集群,均使用国内镜像,版本均统一,使用两个虚拟机,一个主节点,一个从节点,保证k8s一次搭建成功. 注意:Kubernetes,简称K8s,是用8代替名字中间的8个 ...
- Training: Get Sourced
原题链接:http://www.wechall.net/challenge/training/get_sourced/index.php 提示告诉我们答案就藏在这个界面中,使用View Sourcec ...
- 进军东南亚市场,腾讯云数据库 TDSQL 助力印尼 BNC 银行数字化转型
腾讯云数据库在助力金融核心系统分布式替换上,已经辐射到了东南亚市场. 东南亚最大的银行之一印尼BNC银行(Bank Neo Commerce)已正式完成新核心分布式迁移,使用腾讯云数据库TDSQL后, ...
- day31-JQuery04
JQuery04 6.jQuery的DOM操作02 6.9常用遍历节点方法 取得匹配元素的所有子元素组成的集合:children(),该方法只考虑子元素而不考虑任何后代元素 取得匹配元素后面的同辈元素 ...
- 【SQL基础】多表查询:子查询、连接查询(JOIN)、组合查询(UNION集合运算)
〇.概述 1.内容 JOIN表连接(内连接INNER JOIN/JOIN)(外连接LEFT/RIGHT (OUTER) JOIN) 集合运算-UNION联合 2.建表语句 drop table if ...