激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - mysql 鎖表鎖行語句分享(MySQL事務處理)

mysql 鎖表鎖行語句分享(MySQL事務處理)

2019-11-25 16:18MYSQL教程網 Mysql

下面這個語句是鎖定一行數據,開始讀取,一直到刪除后都不會有第二個人也讀到這條數據

代碼如下:


mysql_query("set autocommit=0"); 
$list_one = $db->fetch_first("select * from prizes where id = ".$id." FOR UPDATE"); 
$db->query("DELETE from prizes WHERE id =".$list_one['id']); 
mysql_query("commit"); 



START TRANSACTION, COMMIT和ROLLBACK語法 

復制代碼代碼如下:


START TRANSACTION | BEGIN [WORK] 
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] 
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] 
SET AUTOCOMMIT = {0 | 1} 


START TRANSACTION或BEGIN語句可以開始一項新的事務。COMMIT可以提交當前事務,是變更成為永久變更。ROLLBACK可以 回滾當前事務,取消其變更。SET AUTOCOMMIT語句可以禁用或啟用默認的autocommit模式,用于當前連接。 
自選的WORK關鍵詞被支持,用于COMMIT和RELEASE,與CHAIN和RELEASE子句。CHAIN和RELEASE可以被用于對事務完成進行附加控制。Completion_type系統變量的值決定了默認完成的性質。 
AND CHAIN子句會在當前事務結束時,立刻啟動一個新事務,并且新事務與剛結束的事務有相同的隔離等級。RELEASE子句在終止了當前事務后,會讓服務器斷開與當前客戶端的連接。包含NO關鍵詞可以抑制CHAIN或RELEASE完成。如果completion_type系統變量被設置為一定的值,使連鎖或釋放完成可以默認進行,此時NO關鍵詞有用。 
默認情況下,MySQL采用autocommit模式運行。這意味著,當您執行一個用于更新(修改)表的語句之后,MySQL立刻把更新存儲到磁盤中。 
如果您正在使用一個事務安全型的存儲引擎(如InnoDB, BDB或NDB簇),則您可以使用以下語句禁用autocommit模式: 
SET AUTOCOMMIT=0; 
通過把AUTOCOMMIT變量設置為零,禁用autocommit模式之后,您必須使用COMMIT把變更存儲到磁盤中,或著如果您想要忽略從事務開始進行以來做出的變更,使用ROLLBACK。 
如果您想要對于一個單一系列的語句禁用autocommit模式,則您可以使用START TRANSACTION語句: 

復制代碼代碼如下:


START TRANSACTION; 
SELECT @A:=SUM(salary) FROM table1 WHERE type=1; 
UPDATE table2 SET summary=@A WHERE type=1; 
COMMIT; 


使用START TRANSACTION,autocommit仍然被禁用,直到您使用COMMIT或ROLLBACK結束事務為止。然后autocommit模式恢復到原來的狀態。 
BEGIN和BEGIN WORK被作為START TRANSACTION的別名受到支持,用于對事務進行初始化。START TRANSACTION是標準的SQL語法,并且是啟動一個ad-hoc事務的推薦方法。BEGIN語句與BEGIN關鍵詞的使用不同。BEGIN關鍵詞可以啟動一個BEGIN...END復合語句。后者不會開始一項事務。 
您也可以按照如下方法開始一項事務: 
START TRANSACTION WITH CONSISTENT SNAPSHOT; 
WITH CONSISTENT SNAPSHOT子句用于啟動一個一致的讀取,用于具有此類功能的存儲引擎。目前,該子句只適用于InnoDB。該子句的效果與發布一個START TRANSACTION,后面跟一個來自任何InnoDB表的SELECT的效果一樣。請參見15.2.10.4節,“一致的非鎖定讀”。 
開始一項事務會造成一個隱含的UNLOCK TABLES被執行。 
為了獲得最好的結果,事務應只使用由單一事務存儲引擎管理的表執行。否則,會出現以下問題: 
如果您使用的表來自多個事務安全型存儲引擎(例如InnoDB和BDB),并且事務隔離等級不是SERIALIZABLE,則有可能當一個事務提交時,其它正在進行中的、使用同樣的表的事務將只會發生由第一個事務產生的變更。也就是,用混合引擎不能保證事務的原子性,并會造成不一致。(如果混合引擎事務不經常有,則您可以根據需要使用SET TRANSACTION ISOLATION LEVEL把隔離等級設置到SERIALIZABLE。) 
如果您在事務中使用非事務安全型表,則對這些表的任何變更被立刻存儲,不論autocommit模式的狀態如何。 
如果您在更新了事務中一個事務表之后,發布一個ROLLBACK語句,則會出現一個ER_WARNING_NOT_COMPLETE_ROLLBACK警告。對事務安全型表的變更被 回滾,但是對非事務安全型表沒有變更。 
每個事務被存儲在一個組塊中的二進制日志中,在COMMIT之上。被回滾的事務不被計入日志。(例外情況:對非事務表的更改不會被 回滾。如果一個被回滾的事務包括對非事務表的更改,則整個事務使用一個在末端的ROLLBACK語句計入日志,以確保對這些表的更改進行復制。) 
您可以使用SET TRANSACTION ISOLATION LEVEL更改事務的隔離等級。 
回滾可以慢速運行。在用戶沒有明確要求時,也可以進行回滾(例如,當錯誤發生時)。因此,在明確地和隱含的(ROLLBACK SQL命令)回滾時,SHOW PROCESSLIST會在Stage列中顯示Rolling back,用于連接。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 97黄色网| 亚洲视频精选 | 一区二区三区日本在线观看 | 久草视频中文 | 最近日本电影hd免费观看 | 姑娘第5集高清在线观看 | 91精品国产乱码久久桃 | 九色免费视频 | julieann艳星激情办公室 | 在线播放免费播放av片 | 91精品国产九九九久久久亚洲 | 国产999精品久久久久 | 久草欧美 | 日本免费aaa观看 | 久久久久久久久国产 | 国产在线一区二区三区 | 精国品产一区二区三区有限公司 | 欧美国产综合视频 | 一级免费看片 | 久久免费精品视频 | 久久亚色 | 国产91久久久久 | 亚洲黑人在线观看 | 欧美va亚洲| 日日狠狠久久偷偷四色综合免费 | 中文字幕在线观看精品 | 成人在线视频黄色 | 久草热久 | 黄色视频a级毛片 | 成人毛片免费看 | 国产午夜三级一区二区三桃花影视 | 特级黄色一级毛片 | 97中文字幕在线观看 | 国产妇女乱码一区二区三区 | 色综合777| 一级在线视频 | av电影免费播放 | 日韩视频―中文字幕 | 蜜桃欧美性大片免费视频 | 奶子吧naiziba.cc免费午夜片在线观看 | 亚州精品天堂中文字幕 |