数据库 —— mysql —— 数据库的存储引擎engine
存储引擎介绍
存储引擎就是表的类型,针对不同的存储引擎,mysql会有不同的处理逻辑
MyISAM 是不支持外键约束。
查看支持的存储引擎 show engines;
5.5.1之前默认为MYISAM,5.5后默认为InnoDB。
如果新表与MYISAM旧表有外键联系,报错:'Cannot add foreign key constraint'。
创建表时指定存储引擎
1 create table t1(x int)engine=myisam;
2 create table t1(x int)engine=blackhole; blackhole黑洞,数据丢进去就不见,不会存在在内存,更不会存在在硬盘
3 create table t1(x int)engine=memory; memory:insert数据后存放在内存,重启mysql后不见
4 create table t1(x int)engine=innodb;
innodb |default |Supports transactions,row-level locking,and foreign keys
---- transactions:一系列sql语句,要么同时成立,要么同时不成立;
---- row-level locking:行级锁,
---- foreign keys:外键,建立表与表之间的关系
修改表的存储引擎
alter table xxx ENGINE=InnoDB;
存储引擎的限制
innoDB限制
最大列数:1017列。
最大二级索引数:64个。
前缀索引长度限制:DYNAMIC or COMPRESSED行格式:3072字节。REDUNDANT or COMPACT行格式:767字节。
注意点: For example, you might hit this limit with a column prefix index of more than 191 characters on a TEXT or VARCHAR column, assuming a utf8mb4 character set and the maximum of 4 bytes for each character.
释义:某一列数据类型为 TEXT 或 VARCHAR。该列的长度最大仅能设置为191。因为在utf8mb4编码时,一个字符最大占4个字节。191*4= 764。取决于当前编码下一个字符所占的最大字节数(一般为一个汉字字符所占字节数)。
索引长度限制,与innodb_page_size配置有关。
page_size = 16KB,索引最大长度=3072bytes
page_size = 8KB,索引最大长度=1536bytes
page_size = 4KB,索引最大长度=768bytes
前缀索引的限制同样适用于全列的索引键。
联合索引限制:
最多可支持16列数据建立联合索引。超出会返回异常:ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed
行大小限制
MYISAM特点及限制
二、配置文件管理
出现乱码是存取数据的编码不一致。
\s :查看当前mysql客户端服务端的编码
写在 my.ini 文件里。启动mysql时会读取该文件,可将用户名密码写进配置文件,