mysql主要有四类存储引擎,目前主要使用InnoDB作为存储引擎。
show variables like 'default_storage_engine';
show engine;//语句1 show variables like 'have_%';//语句2
select engine from information_schema.engines where transactions='yes';
create table 表名 (字段名 字段类型) engine=存储引擎;//语句1 create table 表名 (字段名 字段类型) type=存储引擎;//语句2
frame
,可以理解成对整体框架的存储.frm文件
存放的是书架本身,.MYD文件
存储具体的书籍,.MYI文件
存储检索书籍的索引目录。.MYI文件
和.MYD文件
可以存储在不同的文件目录中,从而分散IO读写压力,提高访问速度,具体操作可在创建表的时候,通过DATA DIRECTORY
和INDEX DIRECTORY
属性进行设置。SELECT
和INSERT
CHECK TABLE
和REPAIR TABLE
命令进行表的检查和修改。三者的特点如下所示:
自动增长列
指的是InnoDB支持用户手动插入的条目遵循索引项的自动增长,而不需要用户自己设置。
然而,在InnoDB中,自动增长列必须是索引项,如果是组合索引,则是其中的第一列;而对于MyISAM,则可以是任意数据项。
创建一个表之后,其自动增长列的起始值默认是1,也可以在创建表的时候进行修改:
CREATE TABLE t1 ( id INT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=某个起始数字;
在插入条目的时候,也可以通过ALTER TABLE
命令进行修改:
ALTER TABLE 具体条目 AUTO_INCREMENT=某个起始数字;
外键约束
restrict
:父表的删除和更新不会对子表产生影响cascade
:级联操作,父表的删除和更新操作会影响子表,set null
:父表的删除和更新将会使得子表中相关条目设置为null
值no action
:效果等同于restrict
,父表的删除和更新操作不会对子表产生影响。set forgein_key_checks=0或者1
的值,可以开启(值为1)或者关闭(值为0)外键约束。优缺点
DROP FROM MEMORY 表名; TRUNCATE table 表名;
=
,<=>
,性能较好>
,<
,BETWEEN
,IN
,LIKE
,性能较差order by
,性能较差.frm
文件,用于存储表结构定义。max_heap_table_size
参数用于设置最大行数。TEXT
、BLOB
等可变长度数据类型并不支持,但是对于VARCHAR
数据类型,在实际的数据库操作中依然看作固定长度,因此可支持VARCHAR
数据类型。对上述四种存储引擎进行比较,得出如下表格: