MYSQL有多种存储引擎,
在创建表的时候我们使用sql语句,Create table tableName () engine=myisam|innodb;
这就指明了存储引擎是myisam还是innodb;
SQLServer和Oracle应不存在多个存储引擎;
MYSQL存储引擎
InnoDB存储引擎
Mysql版本>=5.5 默认的存储引擎,MySQL推荐使用的存储引擎。支持事务,行级锁定,外键约束。事务安全型存储引擎。更加注重数据的完整性和安全性。
MyISAM存储引擎介绍
MySQL<= 5.5 MySQL默认的存储引擎。
ISAM:Indexed Sequential Access Method(索引顺序存取方法)的缩写,是一种文件系统。
擅长与处理,高速读与写。
操作上明显的区别是,MyISAM不支持创建外键;
如下图,创建一个表,指定存储引擎为InnoDB;
使用下图语句查看表的存储引擎;
再建一个表,使用MyISAM存储引擎;查看如下,
然后创建test3表,存储引擎和test1相同;
在test1和test3之间创建外键;
然后在test1和test2之间创建外键,提示出错如下;
MySQL里创建外键时(Alter table xxx add constraint fk_xxx foreign key),提示错误,但只提示很简单的信息:ERROR 1005 (HY000): Can't create table '.\env_mon\#sql-698_6.frm' (errno: 150)。
ERROR 1005: Can't create table
主要问题以及解决办法是:
1,MySQL支持外键约束,并提供与其它DB相同的功能,但表类型必须为 InnoDB
2、建外键的表的那个列要加上index
CREATE TABLE IF NOT EXISTS `test3`(
`testid` INT UNSIGNED AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `testid` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
show table status from test where name="test1";
show table status from test where name="test2";