目录
一、字符编码与配置文件
1.配置文件
\s # 查看数据库基本信息(用户、字符编码)
my-default.ini # windows下MySQL默认的配置文件
拷贝my-default.ini并且重命名为my.ini
由于5.6版本编码不统一 会造成乱码,我们需要统一修改为utf8
2.添加字符编码相关的配置(百度查看就好)
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
注意:如果配置文件涉及到了mysqld相关的配置修改,那么需要重启服务端才可以生效
二、存储引擎
1.简介
存储引擎可以简单的理解为针对相同的数据采用的不同存取策略
相关语句:
show engines; # 查看所有的存储引擎
2.需掌握的存储引擎
存储引擎 | 描述 |
---|---|
MyISAM | MySQL5.5及之前版本默认的存储引擎 存取数据的速度快 但是功能较少 安全性较低 |
InnoDB | MySQL5.5之后版本默认的存储引擎 存取数据的速度没有MyISAM快,但是支持事务、行锁、外键等诸多功能,安全性较高 |
Memory | 基于内存的存储引擎,存取数据极快,但是断电立刻丢失 |
BlackHole | 黑洞,任何写进去的数据都会立刻丢失,类似于垃圾站 |
3.不同存储引擎之间底层文件的区别
3.1.InnoDB
- .frm:表结构
- .ibd:表数据、表索引(加快数据查询)
3.2.MyISAM
- .frm:表结构
- .MYD:表数据
- .MYI:表索引(加快数据查询)
3.3.Memory
- .frm:表结构
3.4.BlackHole
- .frm:表结构
3.5.应用示例
create table t1(id int) engine=innodb;
insert into t1 values(1);
create table t2(id int) engine=myisam;
insert into t2 values(1);
create table t3(id int) engine=memory;
insert into t3 values(1);
create table t4(id int) engine=blackhole;
insert into t4 values(1);
注意:
- MySQL中默认是大小写不敏感的(忽略大小写)
- windows cmd终端鼠标右键的意思就是粘贴
三、创建表的完整语法
create table 表名(
字段名1 字段类型(数字) 约束条件,
字段名2 字段类型(数字) 约束条件,
字段名3 字段类型(数字) 约束条件
)engine=存储引擎;
- 字段名和字段类型是必须的(至少写一个)
- 数字跟约束条件是可选的(可有可无)
- 约束条件可以写多个,用空格隔开
- 最后一个字段的结尾加逗号
四、字段类型之整型
1.类型简介
类型 | |
---|---|
tinyint | 1bytes |
smallint | 2bytes |
int | 4bytes |
bigint | 8bytes |
-
验证整型是否自带负号
create table t6(id tinyint); insert into t6 values(-129),(256);
- 注意:发现自动填写为两个边界值,数据失真,没有实际意义,上述所有的整型类型默认都会带有负号
-
自定义移除负号
- unsigned:约束条件之一,意思是不需要负号
create table t7(id tinyint unsigned); insert into t7 values(-129),(256);
2.修改配置文件的方式
插入的数据值超出了数据类型的范围,不应该让其插入并自动修改,没有意义,数据库应该直接报错(这个特性其实是有的,只是被我们改了配置文件)
-
方式1:命令临时修改
set session sql_mode='strict_trans_tables' # 当前客户端操作界面有效 set global sql_mode='STRICT_TRANS_TABLES' # 服务端不重启永久有效
-
方式2:配置文件永久修改
[mysqld] sql_mode='STRICT_TRANS_TABLES'
五、字段类型之浮点型
1.类型简介
三者都可以存储浮点型数据,但是各自的精确度不一致
浮点型 | 属性 |
---|---|
float | 存储浮点型数据 |
double | 存储浮点型数据 |
decimal | 存储浮点型数据 |
2.使用方式
float(255,30) # 第一个数表示总共多少位 第二个数表示小数占多少位
double(255,30)
decimal(65,30)
3.验证精确度问题
create table t8(id float(255,30));
create table t9(id double(255,30));
create table t10(id decimal(65,30));
insert into t8 values(1.11111111111111111111111111111);
insert into t9 values(1.11111111111111111111111111111);
insert into t10 values(1.11111111111111111111111111111);
三者精确度对比:float < double < decimal
注意:一般情况下float足够使用,如果想追求非常完美的精确度,可以使用字符串代替
六、字段类型之字符类型
1.类型简介
字符类型 | 功能 | 属性 |
---|---|---|
char | 定长 | char(4):最大只能存储四个字符,超过范围直接报错,不超出范围则用空格填充至四个字符 |
varchar | 变长 | varchar(4):最大只能存储四个字符,超过范围直接报错,不超出范围有几位就存几位 |
注意:默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格,然后在读取的时候又会自动将填充的空格移除,如果想取消该机制需要sql_mode
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
上述目录是替换不是新增,所以之前的配置也要写上
2.验证char和varchar两者区别
create table t11(id int, name char(4));
create table t12(id int, name varchar(4));
-
结果验证,超出范围两者都报错
- 注意:
sql_mode='strict_trans_tables'
- 注意:
-
验证定长和变长特性
char_length() # 统计字段数据的长度
字符类型 | 区别 |
---|---|
char | 优点:整存整取,速度快 缺点:浪费存储空间 |
varchar | 优点:节省存储空间 缺点:存取数据的速度慢于char |
注意:两者使用频率都很高,现在默认很多时候是varchar
七、数字的含义
1.简介
数字大部分情况下都是用来限制字段的存储长度(整型除外)
- 不是用来限制存储的长度,而是展示长度
2.应用示例
create table t13(id int(3));
create table t14(id int(3) zerofill);
总结:涉及到整型字段的定义,类型后面不需要加括号写数字,除非有业务需求必须固定位数
八、字段类型之枚举与集合
1.枚举
简介:多选一
- 例:男、女、其他
应用示例:
create table t15(
id int,
name varchar(32),
gender enum('male','female','others')
);
2.集合
简介:多选多(包含多选一)
- 例:爱好(唱、跳、rap、篮球)
应用示例:
create table t16(
id int,
name varchar(32),
hobbies set('read','run','music','rap')
);
九、字段类型之日期类型
1.类型简介
日期类型 | 描述 |
---|---|
date | 年月日 |
datetime | 年月日时分秒 |
time | 时分秒 |
year | 年份 |
2.应用示例
create table t17(
id int,
name varchar(32),
birth date,
reg_time datetime,
study_time time,
join_time year
);
insert into t17 values(1,'jason','2022-11-11','2000-11-11 11:11:11','11:11:11','1995');
十、字段约束条件
insert into 表名 vlaues() # 默认按照创建表的字段顺序添加
insert into 表名(字段) vlaues() # 可以自定义字段顺序
约束条件 | 属性 | 应用示例 |
---|---|---|
unsigned | 无负号 | id int unsigned |
zerofill | 零填充 | id int zerofill |
not null | 非空 | name varchar(32) notnull |
default | 默认值 | name varchar(32) defailt ‘jason’ |
unique | 唯一值 | 单列为一:id int unique 联合唯一: host varchar(32) port int unique(host,port) |