MySQL高级 - InnoDB特性
InnoDB
? InnoDB存儲引擎是Mysql的默認存儲引擎。InnoDB存儲引擎提供了具有提交、回滾、崩潰恢復能力的事務安全。但是對比MyISAM的存儲引擎,InnoDB寫的處理效率差一些,并且會占用更多的磁盤空間以保留數據和索引。
InnoDB存儲引擎不同于其他存儲引擎的特點 :
事務控制
create table goods_innodb(id int NOT NULL AUTO_INCREMENT,name varchar(20) NOT NULL,primary key(id) )ENGINE=innodb DEFAULT CHARSET=utf8; start transaction;insert into goods_innodb(id,name)values(null,'Meta20');commit;測試,發現在InnoDB中是存在事務的 ;
外鍵約束
? MySQL支持外鍵的存儲引擎只有InnoDB , 在創建外鍵的時候, 要求父表必須有對應的索引 , 子表在創建外鍵的時候, 也會自動的創建對應的索引。
? 下面兩張表中 , country_innodb是父表 , country_id為主鍵索引,city_innodb表是子表,country_id字段為外鍵,對應于country_innodb表的主鍵country_id 。
create table country_innodb(country_id int NOT NULL AUTO_INCREMENT,country_name varchar(100) NOT NULL,primary key(country_id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;create table city_innodb(city_id int NOT NULL AUTO_INCREMENT,city_name varchar(50) NOT NULL,country_id int NOT NULL,primary key(city_id),key idx_fk_country_id(country_id),CONSTRAINT `fk_city_country` FOREIGN KEY(country_id) REFERENCES country_innodb(country_id) ON DELETE RESTRICT ON UPDATE CASCADE )ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into country_innodb values(null,'China'),(null,'America'),(null,'Japan'); insert into city_innodb values(null,'Xian',1),(null,'NewYork',2),(null,'BeiJing',1);在創建索引時, 可以指定在刪除、更新父表時,對子表進行的相應操作,包括 RESTRICT、CASCADE、SET NULL 和 NO ACTION。
RESTRICT和NO ACTION相同, 是指限制在子表有關聯記錄的情況下, 父表不能更新;
CASCADE表示父表在更新或者刪除時,更新或者刪除子表對應的記錄;
SET NULL 則表示父表在更新或者刪除的時候,子表的對應字段被SET NULL 。
針對上面創建的兩個表, 子表的外鍵指定是ON DELETE RESTRICT ON UPDATE CASCADE 方式的, 那么在主表刪除記錄的時候, 如果子表有對應記錄, 則不允許刪除, 主表在更新記錄的時候, 如果子表有對應記錄, 則子表對應更新 。
表中數據如下圖所示 :
?外鍵信息可以使用如下兩種方式查看 :
show create table city_innodb ;刪除country_id為1 的country數據: ?
delete from country_innodb where country_id = 1;更新主表country表的字段 country_id : ?
update country_innodb set country_id = 100 where country_id = 1;更新后, 子表的數據信息為 : ?
存儲方式
InnoDB 存儲表和索引有以下兩種方式 :
①. 使用共享表空間存儲, 這種方式創建的表的表結構保存在.frm文件中, 數據和索引保存在 innodb_data_home_dir 和 innodb_data_file_path定義的表空間中,可以是多個文件。
②. 使用多表空間存儲, 這種方式創建的表的表結構仍然存在 .frm 文件中,但是每個表的數據和索引單獨保存在 .ibd 中。
總結
以上是生活随笔為你收集整理的MySQL高级 - InnoDB特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL高级 - 存储引擎 - 特性
- 下一篇: MySQL高级 - MyISAM特性