您的位置:首页 > 数据库 > MySQL

MySQL存储引擎--InnoDB

2016-03-26 20:38 337 查看
InnoDB是MySQL数据库的一种存储引擎。InnoDB给MySQL的表提供了事务,回滚,奔溃修复能力和多版本并发控制的事务安全。

当然,MySQL刚开始出来的时候是没有这个引擎的,从3.23.34开始包含InnoDB的存储引擎。

InnoDB是MySQL上第一个提供外键约束的表引擎。而且InnoDB对事务的处理的能力,也是MySQL其他引擎所无法与之比拟的。

一般情况下,我们自己安装的MySQL的默认存储引擎就是InnoDB。

InnoDB存储引擎中支持自动增长列AUTO_INCREMENT。自动增长列的值不能为空,且值必须唯一。MySQL中规定自增列必须为主键。

在插入值时,如果自动增长列不输入值,则插入的值为自动增长后的值;

如果输入的值为0或空(NULL),则插入的值也为自动增长后的值;

如果插入某个确定的值,且该值在前面没有出现过,则可以直接插入。


InnoDB存储引擎支持外键,foreign key。外键所在表的为子表,外键所依赖的表为父表。父表中被子表外键关联的字段必须是主键。[b]当删除,更新父表的某条信息时,子表也必须要有相应的改变。[/b]

OK,关于上面这一点,我自己还真的没注意过,这里我们来实践一下,我们先来创建一个简单的test作为主表,然后再次创建一个test1从表,我们现在来试一下这个test1的从表能不能建立一个没有指向test主键的外键:






这里我们看一下相关sql语句如下:

ALTER TABLE `linkinframe`.`test1`
ADD INDEX `idx_idx` (`test_id` ASC),
DROP INDEX `id_idx` ;
ALTER TABLE `linkinframe`.`test1`
ADD CONSTRAINT `idx`
FOREIGN KEY (`test_id`)
REFERENCES `linkinframe`.`test` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE;


OK,现在看一下整个test1表的建表语句:

CREATE TABLE `test1` (
`id` int(11) NOT NULL,
`test_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_idx` (`test_id`),
CONSTRAINT `idx` FOREIGN KEY (`test_id`) REFERENCES `test` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
莫名其妙的这里还给我多建了一个‘idx_idx’的key,这是索引么还是啥东西呀,还删不掉,我晕。完事等我整理到索引相关应该就清楚啦,实际编码中直接在数据库中建立外键的情况比较少,我好像基本是没有建过,可能是考虑到维护数据方面不方便我们删除数据这样子,实际中很少建外键,不知道这是好的习惯还是坏的习惯。。。

InnoDB存储引擎的优势在于提供了良好的事务管理,奔溃修复能力和并发控制。缺点就是其读写效率稍差,占用的数据空间相对比较大。

TODO,关于InnoDB的优势不应该就这么点总结,后续我会参照下其他的资料,再来补充完整。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: