程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql 鎖表鎖行語句分享(MySQL事務處置)

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

編輯:MySQL綜合教程

mysql 鎖表鎖行語句分享(MySQL事務處置)。本站提示廣大學習愛好者:(mysql 鎖表鎖行語句分享(MySQL事務處置))文章只能為提供參考,不一定能成為您想要的結果。以下是mysql 鎖表鎖行語句分享(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,用於銜接。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved