?? 12-2-7.cfm.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>把語句組入到事務中</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body>
<font FACE="宋體"><b>
<p ALIGN="JUSTIFY">把語句組入到事務中</p>
</b></font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">假如你想在你的網站上出售商業卡。首先,為了做到這一點,你必須創建兩個表格,一個表格包含了要付帳的信用卡帳號的列表。另外一個表則包含了定購產品的定單的列表。無論何時,當一個客戶在訪問你的站點時定購了商業卡,你需要把信息同時添入到兩個表格中。</p>
<p ALIGN="JUSTIFY">現在假設有一個訪問你站點的客戶定購了商業卡。首先該客戶的信用卡號添加到信用卡表中。然而就在這一時刻。你Web服務器的硬盤驅動器突然壞了。該客戶的定單并沒有保留到產品定單表中。這就會使事情變得很糟糕。來訪者的信用卡為商業卡付了賬,但是確沒有收到定購的產品。此時定購的客戶肯定會對你的行為感到生氣。你該怎樣阻止該事情的發生呢?</p>
<p ALIGN="JUSTIFY">在本節中,將會用到下面的三個語句:BEGIN TRANSACTION,COMMIT
TRANSACTION和ROLLBACK TRANSACTION。一個事務(<i>transaction</i>)是一組語句,這組語句要么全部執行,要么全部不執行。下面就是如何使用這些語句的一個簡單的例子:</p>
<p ALIGN="JUSTIFY">BEGIN TRANSACTION </p>
<p ALIGN="JUSTIFY">INSERT credit_cards (username,ccnumber)</p>
<p ALIGN="JUSTIFY">VALUES(</font><font SIZE="3">‘</font><font FACE="宋體" SIZE="3">Andrew
Jones</font><font SIZE="3">’</font><font FACE="宋體" SIZE="3">,</font><font SIZE="3">’</font><font
FACE="宋體" SIZE="3">5555-55-555-55-5555</font><font SIZE="3">’</font><font
FACE="宋體" SIZE="3">)</p>
<p ALIGN="JUSTIFY">INSERT orders(username) VALUES (</font><font SIZE="3">‘</font><font
FACE="宋體" SIZE="3">Andrew Jones</font><font SIZE="3">’</font><font FACE="宋體"
SIZE="3">)</p>
<p ALIGN="JUSTIFY">COMMIT TRANSACTION</p>
<p ALIGN="JUSTIFY">在該例子中,我們使用BEGIN TRANSACTION 和COMMIT TRANSACTION來定義事務塊.在該塊中顯示的語句只有在執行COMMIT
TRANSACTION后才發生效用。假如在到達該語句之前的任一點發生了錯誤,所有在該事務中的語句都不會發生效用。比如在上面的例子中,如果你的硬盤在執行完第一個INSERT語句而在第二個語句之前發生了硬盤錯誤。沒有數據會插入到任一表中。第一個語句會倒轉回去,并不會有如何效果。</p>
<p ALIGN="JUSTIFY">你可以使用ROLLBACK TRANSACTION語句來顯式地倒轉一個事務,如下所示:</p>
<p ALIGN="JUSTIFY">BEGIN TRANSACTION</p>
<p ALIGN="JUSTIFY">INSERT credit_cards(username,ccnumber)</p>
<p ALIGN="JUSTIFY">VALUES(</font><font SIZE="3">‘</font><font FACE="宋體" SIZE="3">Andrew
Jones</font><font SIZE="3">’</font><font FACE="宋體" SIZE="3">,</font><font SIZE="3">’</font><font
FACE="宋體" SIZE="3">5555-55-555-55-5555</font><font SIZE="3">’</font><font
FACE="宋體" SIZE="3">)</p>
<p ALIGN="JUSTIFY">INSERT orders(username) VALUES(</font><font SIZE="3">‘</font><font
FACE="宋體" SIZE="3">Andrew Jones)</p>
<p ALIGN="JUSTIFY">IF DATENAME(dw,GETDATE())=</font><font SIZE="3">”</font><font
FACE="宋體" SIZE="3">Tuesday</font><font SIZE="3">”</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">ROLLBACK TRANSACTION</p>
<p ALIGN="JUSTIFY">ELSE</p>
<p ALIGN="JUSTIFY">COMMIT TRANSACTION</p>
<p ALIGN="JUSTIFY">在上面的例子中,事務在除了星期二外的每天都遞發。假如一個星期中的某一天剛好是星期二,則事務就會倒轉回去,不會產生任何效果。換句話說,在在星期二不會收到任何新的定單。</p>
<b>
<p ALIGN="JUSTIFY">注意</p>
</b></font><font SIZE="3">
<p ALIGN="JUSTIFY"></font><font FACE="宋體" SIZE="3">在和觸發器一起使用時,</font><font
SIZE="3">ROLLBACK TRANSACTION</font><font FACE="宋體" SIZE="3">命令特別有用。參看下面的“結合觸發器和事務過程”部分。</p>
</font>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -