数据库——字符编码、存储引擎、MySQL字段类型、MySQL字段约束条件


一、字符编码

\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
smallint2bytes
mediumint3bytes
int4bytes
bigint8bytes

注意事项:

  1. 需要考虑正负数的问题 如果需要存储负数 则需要占据一个比特位
  2. 注意手机号如果使用整型来存储 需要使用bigint才可以
  3. 当输入的数超出整类所属范围8.0以上版本会报错,5.0、6.0不会报错,会自动将插入的值变为上限。(如tinyint 插入一个128时8.0会报错5.0以及6.0会自动替换为127)。5.0和6.0可以同修改设置改变该设定
  4. 所有的整型都默认带有正负号,所以有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

  1. 在约束力上来看,主要是拥有唯一和非空俩种特性。
  2. 从查找方面来看,主键会在表中生成目录,以便快速查找对应记录
  3. 主键可以由表的一个或多个字段组成,图片和时间不能作为主键
  4. 表可以没有主键,但最多一个主键
  5. 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)
); – 多个字段作为主键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值