''' 數據庫存儲引擎是數據庫底層軟件組織,數據庫管理系統(DBMS)使用數據引擎進行建立、查詢、更新和刪除數據。
不一樣的存儲引擎提供不一樣的存儲機制、索引技巧、鎖定水平等功能,使用不一樣的存儲引擎,還能夠 得到特定的功能。
如今許多不一樣的數據庫管理系統都支持多種不一樣的數據引擎。MySQL的核心就是存儲引擎。 '''
''' InnoDB: 事務性數據庫的首選引擎,支持事務安全表(ACID),支持行鎖和外鍵 MyISAM: 基於ISAM存儲引擎,並對其進行擴展。它是在web、數據倉儲和其餘應用環境下最長使用的存儲引擎之一。 擁有較高的插入、查詢速度,但不支持事務 支持表鎖 Memory: 將表中的數據存儲到內存中,未查詢和引用其餘數據提供快速訪問 每一個表能夠有多達32個索引,每一個索引16列,以及500字節的最大鍵長度
存儲引擎是基於表的,而不是基於庫的。因此存儲引擎也可被稱爲表類型。 '''
存儲引擎的特色及分類mysql
show engines;web
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
show variables like '%storage_engine%';sql
+----------------------------------+--------+ | Variable_name | Value | +----------------------------------+--------+ | default_storage_engine | InnoDB | | default_tmp_storage_engine | InnoDB | | disabled_storage_engines | | | internal_tmp_disk_storage_engine | InnoDB | +----------------------------------+--------+
show create table 表名;數據庫
*************************** 1. row *************************** Table: proxycode Create Table: CREATE TABLE `proxycode` ( `proxycode` int(10) unsigned NOT NULL COMMENT '合法代理編碼', PRIMARY KEY (`proxycode`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
使用ALERT TABLE修改表的存儲引擎可能致使數據庫中的數據丟失,因此在修改前,須要備份數據(通常不建議修改)安全
alter table 表名 engine=存儲引擎名稱app
mysql> alter table student engine=innodb ; Query OK, 0 rows affected Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table student; +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | student | CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) NOT NULL DEFAULT '' COMMENT '姓名', `address` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 | +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set