day09-1存儲引擎

存儲引擎1.基本介紹

  • 基本介紹
  1. MySQL的表類型由存儲引擎(Storage Engines)決定,主要包括MyISAM、innoDB、Memory等
  2. MySQL數據表主要支持六種類型,分別是:CSV,Memory,ARCHIVE,MRG_MYISAM,MYISAM , InnoBDB 。
  3. 這六種又分為兩類,一類是”事務安全型“(transaction-safe),例如:InnoDB 。
    剩下的五種都是第二類,稱為“非事務安全型”(non-transaction-safe)

day09-1存儲引擎

文章插圖
數據庫中的表也應該有不同的類型,表的類型不同,會對應mysql不同的存取機制,表類型又稱為存儲引擎 。
  • 主要的存儲引擎(表類型)特點
特點MyisamMemoryInnoDBArchive存儲限制沒有有64TB沒有事務安全支持鎖機制表鎖表鎖行鎖行鎖B樹索引支持支持支持哈希索引支持支持全文索引支持集群索引支持數據緩存支持支持索引緩存支持支持支持數據可壓縮支持支持空間使用低N/A高非常低內存使用低中等高低批量插入的速度高高低非常高支持外鍵支持
  • 細節說明
  1. MyISAM不支持事務 , 也不支持外鍵,但是其訪問速度快 , 對事務完整性沒有要求
  2. InnoDB存儲引擎提供了具有提交、回滾和崩潰能力的事務安全 。但是比起MyISAM存儲引擎,InnoDB寫得處理效率差一些,并且會占用更多的磁盤空間以保留數據和索引
  3. MEMORY存儲引擎使用存在內存中的內容來創建表 。每個MEMORY表只實際對應一個磁盤文件 。MEMORY類型的表訪問非常地快,因為它的數據是存放在內存中的,并且默認使用HASH索引 。但是一旦MySQL服務關閉,表中的數據就會丟失,表的結構還在 。
2.使用
  • 三種存儲引擎表使用案例
    對于前面我們提到的三種存儲引擎,我們舉例說明
-- 表類型和存儲引擎-- 查看所有的存儲引擎SHOW ENGINES-- InnoDB存儲引擎是前面使用過的-- 1.支持事務 2.支持外鍵 3.支持行級鎖-- myisam存儲引擎CREATE TABLE t28( id INT, `name` VARCHAR(32)) ENGINE MYISAM-- 1.添加速度快 2.不支持外鍵和事務 3.支持表級鎖START TRANSACTION;SAVEPOINT a;INSERT INTO t28 VALUES(1,'jack');SELECT * FROM t28;ROLLBACK TO a; -- 失敗,myisam不支持事務-- memory存儲引擎-- 1.數據存儲在內存中[關閉了mysql服務表數據就會丟失,但是表結構還在]-- 2.執行速度佷快(沒有IO讀寫) 3.默認支持索引(hash表)CREATE TABLE t29( id INT, `name` VARCHAR(32)) ENGINE MEMORYINSERT INTO t29 VALUES(1,'tom'),(2,'jack'),(3,'hsp');SELECT * FROM t29;-- 重啟mysql服務之后DESC t29; -- 表結構還在SELECT * FROM t29;-- 表數據丟失了
  • 如何選擇表的存儲引擎
  1. 如果你的應用不需要事務 , 處理的只是基本的CRUD操作,那么MyISAM是不二選擇 , 速度快
  2. 如果需要支持事務,選擇InnoDB
  3. Memory存儲引擎就是將數據存儲在內存中,由于沒有磁盤IO的等待,速度極快 。但由于是內存存儲引擎,所做的任何修改在服務器重啟后都將消失 。(經典用法:用戶的在線狀態)
    day09-1存儲引擎

    文章插圖
  • 指令修改存儲引擎
alter table table_name engine = 存儲引擎名;
例子
-- 表類型和存儲引擎-- 查看所有的存儲引擎SHOW ENGINES-- InnoDB存儲引擎是前面使用過的-- 1.支持事務 2.支持外鍵 3.支持行級鎖-- myisam存儲引擎CREATE TABLE t28( id INT, `name` VARCHAR(32)) ENGINE MYISAM-- 1.添加速度快 2.不支持外鍵和事務 3.支持表級鎖START TRANSACTION;SAVEPOINT a;INSERT INTO t28 VALUES(1,'jack');SELECT * FROM t28;ROLLBACK TO a; -- 失敗,myisam不支持事務-- memory存儲引擎-- 1.數據存儲在內存中[關閉了mysql服務表數據就會丟失,但是表結構還在]-- 2.執行速度佷快(沒有IO讀寫) 3.默認支持索引(hash表)CREATE TABLE t29( id INT, `name` VARCHAR(32)) ENGINE MEMORYINSERT INTO t29 VALUES(1,'tom'),(2,'jack'),(3,'hsp');SELECT * FROM t29;-- 重啟mysql服務之后DESC t29; -- 表結構還在SELECT * FROM t29;-- 表數據丟失了-- 修改存儲引擎名ALTER TABLE t29 ENGINE = INNODB;【day09-1存儲引擎】

    推薦閱讀