国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

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

2024-07-24 12:44:11
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

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節,“一致的非鎖定讀”。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 寿光市| 漯河市| 新兴县| 赤城县| 南召县| 锡林郭勒盟| 竹山县| 横峰县| 太仆寺旗| 同德县| 双城市| 依兰县| 威宁| 廊坊市| 文登市| 新干县| 沧州市| 抚顺市| 东光县| 永善县| 柳江县| 称多县| 永和县| 甘德县| 西乌珠穆沁旗| 临沂市| 桓台县| 广河县| 襄垣县| 石楼县| 昂仁县| 光山县| 河北省| 武隆县| 余干县| 金堂县| 金湖县| 西藏| 通州区| 泰兴市| 永登县|