日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL高级 - InnoDB特性

發布時間:2024/4/14 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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特性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。