MySQL一周目三日
MySQL存储、语法、基本数据类型以及约束条件
1 存储引擎定义
存储引擎简而言之就是mysql内部不同的存储方式
可以通过 show engines; 来查看内部的存储引擎

2 主要搜索引擎
2.1 InnoDB
该搜索引擎是5.5版本之后的默认搜索引擎
2.2 MyISAM
该搜索引擎是5.5版本之前的默认搜索引擎
2.3 MEMORY
数据直接存储在内存中,不会写入文件,其特点便是速度快,但是断电会立刻丢失数据
2.4 BLACKHOLE
写入的数据都会丢失
注 2.1InnoDB与2.2MyISAM的优缺点
MyISAM虽然比InnoDB的运行速度快但是不支持事务外键等功能,数据的安全性能低于InnoDB
事务 保证数据的操作要么全部成功,要么全部失败
行所 对数据进行加锁,保证同一时间只能由一个人进行操作
外键 建立表关系
3 存储引擎切换以及文件结构
3.1 不使用默认,引擎的切换方式
create table 表名(字段名 字段类型)engine=引擎名称; 不写engine=特定引擎名称使用默认搜索引擎
3.2 不同搜索引擎产生的文件数目不同
innoDB 产生两个文件;分别是.frm(表结构文件)和.idb(表数据、索引文件)
MyISAM 产生两个文件;分别是.frm(表结构文件)和.MYD(表数据文件)和.MYI(表索引文件)
# 表的结构越清晰,速度越快
memory 产生一个.frm的表结构文件,数据存放在内存,重启即消失
blackhole 产生一个.frm的表结构文件,数据不存储,直接丢弃
4 创建标的完整语法结构
create table 表名(
字段名 字段类型(宽度)约束条件,
字段名 字段类型(宽度)约束条件,
字段名 字段类型(宽度)约束条件,
字段名 字段类型(宽的)约束条件
);
注意事项
1 字段名和字段类型是必须的,宽度和约束条件是可以选择的,即可有可无
2 约束条件可以选择,并且一个字段名可以有多个约束条件
3最后结束的字段语句也就是在最后的括号之前的字段语句 不能有逗号
5 字段的类型
5.1 整形
在mysql中,不同的整形存储的数字范围不同,常见的整形类型主要有tinyint smallint int和bigint

注意事项:
1 这些整数的大小默认都是带符号的,其中符号占据一个bite
2 超出的范围的值以范围内最大的值显示,如范围内最大为255,输入256,则显示255
3 如果想要无符号,可以使用约束条件 unsigned
4 在定义整形的时候不需要带宽度,不同的整形会默认带不同的宽度
5.2 浮点型
mysql中不同的浮点型存储小数的范围和精度不同,主要的浮点型有 float double decimal
float(255,30) 总共255位,小数占30位
double(255,30) 总共255位,小数占30位
decimal(65,30) 总共65位,小数占30位
精确度比较 : float (精确到小数点后7位) < double (精确到小数点后15位) < decimal (精确到小数点后30位)
数据精确度问题很多场景都会发生,如手机号码应该用整形,但是可以采取不同的存储类型,如字符串,该类型不存在精确度问题
5.3 字符串
mysql中字符串类型有 char 和 varchar
char(4) 最多可以存储四个字符 超过了报错,没有超过也按照四个字符存储,默认用空格填充
varchar(4) 最多可以存储四个字符,超过了报错,没有超过,则有多少存多少
由于5.6以及之前的版本没有开启严格模式,超过不报错,自动截取到字符上限,字符的上限就是括号内的数字 5.7及以后的版本默认开启严格模式
char和varchar的优缺点
char 优点:整存整取,速度快 缺点:自动填充空格,浪费存储空间
varchar 优点:节省存储空间 缺点:速度较char之来的慢
5.4 补充 严格模式
查看严格模式 show variables like '%mode%';
修改严格模式 set global sql_mode = 'strict_trans_tables';
char_length() 可以查看统计的数据长度,默认情况下读取时会自动删去填充的空格
输入 set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH"; 可以开启不去除空格的严格模式参数
严格模式配置启动不需要重启服务器,只须要重登客户端即可
6 时间类型
时间类型有date time Datetime year
date 年月日
time 时分秒
datetime 年月日时分秒
yaer 年
可以运用如下图中参数进行配置

create table student( id int, name char(16), born_year year, birth date, study_time time, reg_time datetime );
时间类型的数据很多时候可以自动获取
7 枚举与集合
enum 多个选一个 用在枚举中
set 多个选多个 用在集合中,也可以多选一
7.1 枚举类型
创建表格式
crate table gender(
id int,
name varchar(16),
gender enum('male','female')
)
插入的数据只能是enum后括号内的数据,否则报错
7.2 集合类型
创建表格式
create table hobby(
id int,
name varchar(16),
hobby set('read','run','football','basketball')
)
插入的数据只能是set后括号内的数据,否则报错,可以只选一个,也可以选择多个
8 宽度
针对数字类型的时候 如 int(4) 表示数字的展示长度,并不是用来限制的。
当展示长度的位数不够时,用0填充,超过显示超过的数字 如 插入11111 int(2)时展示1111 int(5)时展示11110
在定义数字的时候无须手动添加宽度
9 约束条件
1 unsigned 无符号
2 zerofill 0填充
3 not null 不能为空(要点1) 使用 在表完整结构的位置的约束条件位置写入not null即可
4 default 默认值(要点2) 使用 id int default '0001' 注意0001和int的类型要保证一致
5 unique 单列唯一(要点3) 使用 在表完整结构的位置的约束条件位置写入unique即可
5 unique 多列唯一(要点3) 使用 在结尾的括号之前写入unique(字段名,字段名) 可以使字段名和字段名的组合不能重复,方式单独的字段名可以重复