MySQL引擎:能夠理解爲,MySQL的「文件系統」,只不過功能更增強大。
MySQL引擎功能:除了能夠提供基本的存取功能,還有更多功能事務功能、鎖定、備份和恢復、優化以及特殊功能。mysql
MySQL 提供如下存儲引擎
InnoDB 經常使用
MyISAM 經常使用
MEMORY
ARCHIVE
FEDERATED
EXAMPLE
BLACKHOLE
MERGE
NDBCLUSTER
CSV
還可使用第三方存儲引擎(TokuDB)sql
一、使用 SELECT 確認會話存儲引擎: SELECT @@default_storage_engine; 二、使用 SHOW 確認每一個表的存儲引擎: show engines; show create table city; show table status like 'city'\G 三、使用 INFORMATION_SCHEMA 確認每一個表的存儲引擎: select table_schema,table_name,engine from information_schema.tables where table_schema='world'; select table_schema,table_name,engine from information_schema.tables where table_schema='mysql'; select table_schema,table_name,engine from information_schema.tables where engine='csv'; 四、在啓動配置文件中設置服務器存儲引擎: [mysqld] default-storage-engine=<Storage Engine> 五、使用 SET 命令爲當前客戶機會話設置: SET @@storage_engine=<Storage Engine>; 六、在 CREATE TABLE 語句指定: CREATE TABLE t (i INT) ENGINE = <Storage Engine>;
共享表空間:主要存放系統元數據等
獨立表空間:主要存放用戶數據數據庫
InnoDB系統表空間:
默認狀況下,InnoDB 元數據、撤消日誌和緩衝區存儲在系統「表空間」中。
這是單個邏輯存儲區域,能夠包含一個或多個文件。
每一個文件能夠是常規文件或原始分區。
最後的文件能夠自動擴展。 安全
InnoDB系統表空間配置服務器
經過添加數據文件增長表空間大小。 在 my.cnf 文件中使用 innodb_data_file_path 選項。 [mysqld] innodb_data_file_path=datafile_spec1[;datafile_spec2]... 配置示例:建立一個表空間,其中包含一個名爲 ibdata1 且大小爲 50 MB(固定)的數據文件和一個名爲 ibdata2 且大小爲 50 MB(自動擴展)的數據文件: [mysqld] innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend 默認狀況下將文件放置在 data 目錄中。 若是須要,顯式指定文件位置。
除了系統表空間以外,InnoDB 還在數據庫目錄中建立另外的表空間,用於每一個 InnoDB 表的 .ibd 文件。 InnoDB 建立的每一個新表在數據庫目錄中設置一個 .ibd 文件來搭配表的 .frm 文件。 可使用 innodb_file_per_table 選項控制此設置 更改該設置僅會更改已建立的新表的默認值。 mysql> show variables like '%per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.00 sec) 永久生效須要在my.cnf配置文件添加innodb_file_per_table={0|1},而後重啓mysql服務 注:在mysql5.6開始,默認的配置爲: | innodb_file_per_table | ON |
Atomic(原子性)
全部語句做爲一個單元所有成功執行或所有取消。
Consistent(一致性)
若是數據庫在事務開始時處於一致狀態,則在執行該事務期間將保留一致狀態。
Isolated(隔離性)
事務之間不相互影響。
Durable(持久性)
事務成功完成後,所作的全部更改都會準確地記錄在數據庫中。所作的更改不會丟失。併發
START TRANSACTION(或 BEGIN):顯式開始一個新事務 COMMIT:永久記錄當前事務所作的更改 ROLLBACK:取消當前事務所作的更改 SAVEPOINT:分配事務過程當中的一個位置,以供未來引用 ROLLBACK TO SAVEPOINT:取消在 savepoint 以後執行的更改 RELEASE SAVEPOINT:刪除 savepoint 標識符 SET AUTOCOMMIT:爲當前鏈接禁用或啓用默認 autocommit 模式
在MySQL5.5開始,開啓事務時再也不須要begin或者start transaction語句。而且,默認是開啓了Autocommit模式,做爲一個事務隱式提交每一個語句。 在有些業務繁忙企業場景下,這種配置可能會對性能產生很大影響,但對於安全性上有很大提升。 未來,咱們須要去權衡咱們的業務需求去調整是否自動提交。 咱們能夠經過如下命令進行修改關閉(0是關閉,1是開啓): SET GLOBAL AUTOCOMMIT=0; #全部新建會話 SET SESSION AUTOCOMMIT=0; #當前會話 SELECT @@AUTOCOMMIT; #查看設置結果 咱們也能夠修改配置文件讓其永久生效: vi /etc/my.cnf [mysqld] AUTOCOMMIT=0
用於隱式提交的 SQL 語句: START TRANSACTION SET AUTOCOMMIT = 1 致使提交的非事務語句: DDL語句: (ALTER、CREATE 和 DROP) DCL語句: (GRANT、REVOKE 和 SET PASSWORD) 鎖定語句:(LOCK TABLES 和 UNLOCK TABLES) 致使隱式提交的語句示例: TRUNCATE TABLE LOAD DATA INFILE SELECT FOR UPDATE
Redo是什麼? redo,顧名思義「重作日誌」,是事務日誌的一種。 做用是什麼? 在事務ACID過程當中,實現的是「D」持久化的做用。 undo是什麼? undo,顧名思義「回滾日誌」,是事務日誌的一種。 做用是什麼? 在事務ACID過程當中,實現的是「A、C」原子性和一致性的做用 什麼是「鎖」? 「鎖」顧名思義就是鎖定的意思。 「鎖」的做用是什麼? 在事務ACID過程當中,「鎖」和「隔離級別」一塊兒來實現「I」隔離性的做用 鎖的粒度: 一、MyIasm:低併發鎖——表級鎖 二、Innodb:高併發鎖——行級鎖 四種隔離級別: READ UNCOMMITTED 容許事務查看其餘事務所進行的未提交更改 READ COMMITTED 容許事務查看其餘事務所進行的已提交更改 REPEATABLE READ****** 確保每一個事務的 SELECT 輸出一致 InnoDB 的默認級別 SERIALIZABLE 將一個事務的結果與其餘事務徹底隔離
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">高併發