文章目录
一、字符编码
\s 查看数据库字符编码信息
如果是5.X系列 显示的编码有多种
latin1
gbk
如果是8.X系列 显示的统一是utf8mb4
utf8mb4是utf8优化版本 支持存储表情
字符编码不统一可能会出现乱码情况
修改数据库字符编码:
步骤1:创建一个my.ini文件
步骤2:配置需要的信息
步骤3:重启数据库服务(windows中可以在服务中重启,或者cmd中使用指令)
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
二、存储引擎
1.什么是存储引擎
存储引擎可以理解为处理数据的不同方式
show engines;查看存储引擎
常见存储引擎:
MyISAM
5.1之前版本MySQL默认的存储引擎
特点:存取数据的速度快 但是功能很少 安全性较低
InnoDB
5.1之后版本MySQL默认的存储引擎
特点:有诸多功能 安全性较高 存取速度没有MyISAM快
BlackHole
任何写入的数据都会立刻消失(类似于垃圾回收处理站)
Memory
以内存作为数据存取地 速度快但是断电立刻丢失
存储引擎可以再创建表的时候设置:
create table 表名(属性名 类型 约束条件)engine=引擎名;
三、mysql字段类型
create table 表名(
字段名1 字段类型(数字) 约束条件,
字段名2 字段类型(数字) 约束条件,
字段名3 字段类型(数字) 约束条件
);
字段出可以使用comment设置一个别名:
create table t1(
id int comment “序号”
);
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件可以写多个 空格隔开即可(后面详细讲解)
字段名1 字段类型(数字) 约束条件1 约束条件2 约束条件3 …
4.最后一行字段结尾不能加逗号
1.整型
类型 | 括号中的参数 | 大小 |
---|---|---|
tinyint | 显示数字时的位数,如果数字不够位自动在前方补0,不写时按默认按数字显示 | 1bytes |
smallint | 2bytes | |
mediumint | 3bytes | |
int | 4bytes | |
bigint | 8bytes |
注意事项:
- 需要考虑正负数的问题 如果需要存储负数 则需要占据一个比特位
- 注意手机号如果使用整型来存储 需要使用bigint才可以
- 当输入的数超出整类所属范围8.0以上版本会报错,5.0、6.0不会报错,会自动将插入的值变为上限。(如tinyint 插入一个128时8.0会报错5.0以及6.0会自动替换为127)。5.0和6.0可以同修改设置改变该设定
- 所有的整型都默认带有正负号,所以有1bit不能存数而是放的正负号,可以添加约束条件,是所有位都存放数字
2.浮点型
精度指数字一共多少位,标度指小数部分多少位。
类型 | 括号中的参数 | 精度(如果超出最后一位显示位就会四舍五入) |
---|---|---|
float | (精度,标度) | 0~23,设置精度时可以超出,但精确性会下降 |
double | (精度,标度) | 24~53,设置精度时可以超出,但精确性会下降 |
decimal | (精度,标度) | 正常显示 |
3.字符型
类型 | 长度 | 特点 |
---|---|---|
char | 固定长(一旦设定长度,超出长度会报错,不够长度时补空格) | 整存,整拿,速度快,会浪费空间 |
varchar | 变长(字符串多长就占多长,超出长度设定时从前向后取长度) | 节省空间,因为变长存取速度稍慢 |
补充:
char_length() 获取字段数据的长度
该方法无法直接获取到定长的真实长度
因为MySQL在存数据的时候会自动填充空格在取数据的时候又会自动移除空格
让MySQL在取数据的时候不自动移除空格:
set session sql_mode = ‘pad_char_to_full_length’ 单次修改
varchar在存数据的时候会生成一个1bytes的报头 记录数据长度
varchar在取数据的时候先会读取1bytes的报头 从中获取真实数据长度
4.枚举与集合
枚举:
enum(值1,值2,值3…值n) 从enum参数中几选一
集合:
set(值1,值2,值3…值n) 从set参数中几选几(也能只选一个)
5.日期类型
类型 | 格式 |
---|---|
date | 年月日 |
datetime | 年月日时分秒 |
time | 时分秒 |
year | 年 |
四、mysql字段约束条件
约束条件是基于字段类型之上的额外限制,约束条件除了在创建表时使用,还能在修改表结构时使用。
1.无需正负号
unsigned
让整型不再拿出1bit存储符号,提高整型数字的范围,但只能表示正数。
eg:
create table t1(
sum int unsigned
);
2.零填充
zerofill
针对于整型添加记录时位数不够自动在前面补0
3.非空
not null
eg:
create table t1(
id int not null
);
4.默认值
default(默认值)
eg:
create table t1(
id int default(1)
);
5.唯一值
unique
设置了该约束条件的字段其值必须唯一,唯一值可以是一个或者多个字段组合起来
eg:
create table t1(
id int unique
); 一个字段变为唯一值
create table t1(
id int,
cd int,
unique(id, cd)
);多个字段组装起来变为唯一值
6.自增
auto_increment
专门配合主键一起使用,只有整型可以自增
eg:
create table t1(
id int auto_increment
);
7.主键
primary key
- 在约束力上来看,主要是拥有唯一和非空俩种特性。
- 从查找方面来看,主键会在表中生成目录,以便快速查找对应记录
- 主键可以由表的一个或多个字段组成,图片和时间不能作为主键
- 表可以没有主键,但最多一个主键
- InnoDB存储引擎规定的一张表有且必须要有一个主键用于构建表,如果没有则优先选择唯一约束为主键,如果都没有会自动生成一个内部列,按照这个列的顺序保存。
eg:
create table t1(
id int auto_increment primary key,
age int
); – 创建字段时设置主键
create table t1(
id int auto_increment
age int,
constraint 主键名 primary key (主键字段) /* constaraint 主键名 这部分可以忽略,忽略时会自动生成主键名字 */
); – 创建完所有字段后设置主键
create table t1(
id int auto_increment,
name varchar(5),
primary key(id, name)
); – 多个字段作为主键