Fork me on GitHub

mysql引擎&列属性

MySQL存储引擎

与引擎有关的操作指令

  • 查看你的mysql支持的存储引擎:show engines;
  • 查看你的mysql当前默认的存储引擎: show variables like '%storage_engine%';
  • 查看某个表使用了什么引擎:
    • show create table 表名; (查看该表的建表语句)
    • show table status where name='表名' \G
  • 修改默认的引擎: ` set default_storage_engine=引擎名称;`(也可在配置文件中修改)
  • 修改表的引擎: alter table 表名 engine=引擎名称;
  • 创建表时指定引擎: 在创表语句的最后加上engine=引擎名称;即可

常用的引擎

  • myisam引擎:
1
2
3
4
5
6
MyISAM 是 MySQL 的默认存储引擎。MyISAM 不支持事务、也不支持外键,其优势是访问的速度快,对事务完整性没有要求或者以 SELECT、INSERT 为主的应用基本上都可以使用这个引擎来创建表。
每个 MyISAM 在磁盘上存储成 3 个文件,其文件名都和表名相同,但扩展名分别是:
.frm(存储表定义)
.MYD(MYData,存储数据)
.MYI(MYIndex,存储索引)
数据文件和索引文件可以放置在不同的目录,平均分布 IO,获得更快的速度。
  • innodb引擎:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
InnoDB 存储引擎?供了具有?交、回滚和崩溃恢复能力的事务安全。但是对比 MyISAM的存储引擎,InnoDB 写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
特点:
1 、 自动增长列
InnoDB 表的自动增长列可以手工插入,但是插入的值如果是空或者 0,则实际插入的将
是自动增长后的值。

2 、 外键约束
MySQL 支持外键的存储引擎只有 InnoDB,在创建外键的时候,要求父表必须有对应的
索引,子表在创建外键的时候也会自动创建对应的索引。

3 、InnoDB 存储表和索引有以下两种方式。
3.1、使用共享表空间存储,这种方式创建的表的表结构保存在.frm 文件中,数据和索引保存在 innodb_data_home_dir 和 innodb_data_file_path 定义的表空间中,可以是多个文件。
3.2、使用多表空间存储,这种方式创建的表的表结构仍然保存在.frm 文件中,但是每个表的数据和索引单独保存在.ibd 中。如果是个分区表,则每个分区对应单独的.ibd文件,文件名是“表+分区名”,可以在创建分区的时候指定每个分区的数据文件的位置,以此来将表的 IO 均匀分布在多个磁盘上

默认的情况下,innodb的数据都存放在ibdata1文件中,可以在创建表的时候指定innodb和myisam一样,表和数据不存放在一起(后面提到)

总结:myisam引擎的表可以任意的移动,innodb不能任意移动.

列属性

  • 是否为空 (null not null)
    • null 表示可以为空
    • not null 表示不可为空
  • 设置默认值 default
  • 自增长 auto_increment
    • 字段值默认从1开始,每次递增1
    • 特点:不会有重复的值,主键常用
  • 主键 primary key
    • 主键:主键是唯一的
    • 特点:不能为空,也不能重复
    • 一个表只有一个主键
  • 唯一键 unique
    • 特点:不能重复,不能为空
    • 一个表可以有多个唯一键
  • 备注 comment
  • SQL注释
    • 单行注释: 一、#注释内容 二、–注释内容
    • 多行注释: /*注释内容*/