存储引擎
引擎指的是一个系统的核心部分
引擎有不同的分类是为了适应不同的使用场景
查看MySQL支持的所有引擎 show engines;
MRG_MYISAM 是一堆MYISAM表的集合
用于做水平分表,如果一个表数据量太大将导致效率低
水平分表就是把整个大表拆分为不同的小表
垂直分表
一个表中字段太多,可以将常用的分到一个表中,不常用的分到一个表中,然后建立联系
innodb 是最常用的引擎,因为支持事物,行锁,外键一系列功能
MYISAM 没有上述功能但是存储效率高于innodb并且支持分表
MYISAM 速度快,不能永久储存,没有特殊功能
详细建表语句
[]表示可选
create table 表名(字段 类型[(宽度) 约束条件], 字段 类型[(宽度) 约束条件])
数据类型
不同的数据类型,描述信息可以更加方便精准
在计算机中对数据分类可以减少内存开销
数字类型
整形 默认都是有符号的
tinyint 1个字节
smallint 2个字节
mediumint 3个字节
int 4个字节
bigint 8个字节
设置为无符号需要在类型后添加unsigned
create table 表名(字段 int unsigned);
宽度在整型数据中,不是用来设置可存储的数据范围
用于控制最小显示长度,长度不够就帮你补0但需要指定zerofill
create table 表名(字段名 tinyint(5) zerofill);
一般使用整型数据,宽度这个属性不指定
浮点
flaot 4个字节 float(a,b)
double 8个字节 double(a,b)
decimal 不固定 decimal(a,b)
a表示总位数,b表示小数位数
共同点:
小数位最大30位
float与double总长最大为255位,都不精确
不同点:decimal总长最大为65位,并且是精确
字符串
char 固定长度
var 可变长度
固定长度的字符串类型
tinytext 1个字符 text 2个字符 mediumtext 3个字符 longtext 4个字符
二进制
binary是固定长度的二进制
varbinary是可变长度的二进制
固定长度无法修改的二进制
tinyblob blob mediumblob longblob
强调:二进制数据类型一般不用,如果要存储多媒体数据如音频,视频需要将其放到FTP文件服务器上,然后数据库中只存储连接即可
时间类型
year 年份 date 日期 time 时间 datatime 日期+时间 tiemstamp 时间戳
year 可以是数字也可以是字符串
timestamp 会自动更新时间,在你插入或修改时
current_time 和 now() 所有的时间 日期类型都可以使用这两个方法来输入当前时间
所有日期时间,数据库返回的都是字符串
严格模式
mysql5.7以下版本 默认都是非严格模式
将 sql_mode = strict_trans_tables 写在配置文件中可以永久设置为严格模式
enum 提前规定该自动能选的值的范围 多选一
set 提前规定该字段能选的值的范围 多选多
约束
约束是指给数据的值加上一些限制
类型就是一种限制,宽度对数字型没有存储限制
其他类型的宽度是有限制作用的
约束就是除了数据类型以及宽度之外的其他限制
unsigned就是约束中第一种表示整数不包含符号
约束是为了保证数据的完整性
not null 非空 限制字段必须有值
default 默认值
create table 表名(字段 类型(长度) not null default 默认值)
unique 唯一性约束 并且是一个索引
要求该字段的值不能重复
单字段
create table 表名(字段 类型 unique)
多字段
create table 表名(字段 类型,字段 类型, unique(字段,字段))
primary key 主键约束
从约束角度来看与非空+唯一是相同的效果
不能为空且不能重复
需要强调的是:主键除了有约束的效果,还有一个索引并且是非常重要的索引,在innodb中主键是必不可少的。innodb组织数据结构是安装树形结构来组织的,该结构中必须有一个数据,不能为空且唯一的如果没有这样的数据,树形结构也是不存在的
mysql在创建的时候会检测是否存在主键,如果没有它就找一个具有非空且唯一约束的字段提升为主键,如果没有这样的字段mysql就会创建一个隐藏字段作为主键
索引可以提高查询速度,就像字典里的目录,用于快速定位数据所在位置
只要你是用innodb引擎,你就应该在建表时设置一个主键通常主键字段叫做id
id有唯一标识的意思
自动增长
主键在使用中自动+1
create table 表名(id int primary key auto_increment)
当你创建表就应该有主键并且自动增长