MySQL事務 MySQL事務主要用於處理操作量大,複雜度高的數據。 比如說,在人員管理系統中,你刪除一個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這些資料庫操作語句就構成一個事務。 (1)在MySQL中只有使用了Innodb資料庫引擎的資料庫或表才支持事務。 ...
MySQL事務
MySQL事務主要用於處理操作量大,複雜度高的數據。
比如說,在人員管理系統中,你刪除一個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這些資料庫操作語句就構成一個事務。
(1)在MySQL中只有使用了Innodb資料庫引擎的資料庫或表才支持事務。
(2)事務處理可以用來維護資料庫的完整性,保證成批的sql語句要麼全部執行,要麼全部不執行。
(3)事務用來管理insert,update,delete語句。
一般來說,事務必須滿足4個條件(ACID):Atomicity(原子性)、Consisttency(穩定性)、Isolation(隔離性)、Durability(可靠性)。
(1)事務的原子性:一組事務,要麼成功,要麼撤回。
(2)事務的穩定性:有非法數據(外鍵約束之類的),事務撤回。
(3)事務的隔離性:事務獨立運行。一個事務處理後的結果,影響了其他事務,要麼其他事務會撤回。事務的100%的隔離,需要犧牲速度。
(4)事務的可靠性:軟、硬體崩潰後,InnoDB資料庫驅動會利用日誌文件重構修改,可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit選項,決定什麼時候把事務保存到日誌里。
在MySQL控制台使用事務來操作:
(1)開始一個事務
start transaction
(2)做保存點
savepoint保存點名稱
(3)操作
(4)可以回滾,可以提交,沒有問題就提交,有問題就回滾。
MySQL索引:
MySQL索引的建立對於MySQL的高效運行是很重要的,索引可以大大提高MySQL的檢索速度。
打個比方,如果合理的設計且使用索引的MySQL是一輛蘭博基尼的話,那麼沒有設計和使用所以的MySQL就是一個人力三輪車。
索引分為單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。組合索引,即一個索引包含多個列。
創建索引時,你需要確保該索引是應用在sql查詢語句的條件(一般作為where子句的條件)。
實際上,索引也是一張表,該表保存了主鍵與索引欄位,並指向實體表的記錄。
上面都在說使用索引的好處,但過多的使用索引會造成濫用。因此索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,比如對錶進行insert/update和delete.因為更新表時,MySQL不僅要保存數據,還要保存以下索引文件。
建立索引會占用磁碟空間的索引文件。
一、普通索引
(1)創建索引
這是最基本的索引,它沒有任何限制。它有以下幾種創建方式:
CREATE INDEX indexName ON mytable(username(length));
如果是char,varchar類型,length可以小於欄位實際長度;
如果是BLOB和TEXT類型,必須指定length.
(2)修改表結構
ALTER mytable ADD INDEX [indexName] ON (username(length))
(3)創建表的時候直接指定
CREATE TABLE mytable(
ID INT NULL,
username VARCHAR(16) NOT NULL,
INDEX[indexName](username(length))
);
(4)刪除索引的語法
DROP INDEX[indexName] ON mytable;
二、唯一索引
它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有控制。如果是組合索引,則列值的組合必須唯一。它有以
下幾種創建方式:
(1)創建索引
REATE UNIQUE INDEX indexName ON mytable(username(length));
(2)修改表結構
ALTER mytable ADD UNIQUE [indexName] ON (username(length));
(3)創建表的時候直接指定
CREATE TABLE mytable(
ID INT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username(length))
);
三、使用ALTER命令添加和刪除索引
有四種方式來添加數據表的索引:
(1)該語句添加一個主鍵,這意味著索引值必須是唯一的,且不能為NULL。
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list);
(2)這條語句創建索引的值必須是唯一的(除了NULL外,NULL可能出現多次)。
ALTEE TABLE tbl_name ADD UNIQUE index_name (column_list);
(3)添加普通索引,索引值可出現多次。
ALTER TABLE tbl_name ADD INDEX index_name(column_list);
(4)該語句指定了索引為FULLTEXT,用於全文索引。
ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list);
四、顯示索引信息
你可以使用SHOW INDEX命令來列出表中的相關的索引信息,可以通過添加\G來格式化輸出信息。
實例:
mysql>SHOW INDEX FROM table_name\G