Ⅰ SQL回滾的作用什麼
回滾的作用就是,當有一個SQL語句執行時,條件不符合要求,比如你要插入一個數據,但是插入的數據要有條件的,這時候你就可以用回滾,如果條件成功就COMMIT提交的意思,不然就ROLLBACK回滾,也就是說插入不成功
Ⅱ 在SQL中怎樣使用事務
SQL Server 需要顯示的定義 開始一個事務.
BEGIN TRANSACTION;
例如:
1> BEGIN TRY
2> -- SQL Server 需要顯示的定義 開始一個事務.
3> BEGIN TRANSACTION;
4> -- 插入2條同樣的數據,使主鍵重復,引發錯誤後回滾事務.
5> INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
6> INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
7> -- 執行成功後,需要提交事務.
8> COMMIT;
9> END TRY
10> BEGIN CATCH
11> PRINT('Main.錯誤代碼 = ' + STR(ERROR_NUMBER()));
12> PRINT('Main.錯誤嚴重級別 = ' + STR(ERROR_SEVERITY()));
13> PRINT('Main.錯誤狀態代碼 = ' + STR(ERROR_STATE()));
14> PRINT('Main.錯誤信息 = ' + ERROR_MESSAGE());
15> -- 回滾事務
16> ROLLBACK;
17> END CATCH
18>
19> go
Ⅲ SQL Server中事務處理怎麼用
BeginTrans:開始事務
CommitTrans:提交事務
RollBackTrans:回滾事務
事務具有原子性,要麼不執行,要麼全執行,一旦成功執行永久保存。下面是個轉賬的事務應用的例子。
If Not Exists (Select * From sysobjects Where name='bank')
Begin
Create Table bank
(
bankid int identity(1,1) Primary Key ,
username varchar(50) not null,
rmbnum float not null
)
End
-- add constraint 限制帳戶存額不小於0
Alter Table bank add constraint CK_bank_rmbnum check(rmbnum>0)
-- init table bank
Insert Into Bank (username,rmbnum) Values ('張三',10000)
Insert Into Bank (username,rmbnum) Values ('李四',10000)
Insert Into Bank (username,rmbnum) Values ('王五',10000)
Insert Into Bank (username,rmbnum) Values ('小兒',10000)
-- 執行轉賬 將張三的帳戶上劃20000萬到李四的賬戶上
declare @howmuch float
set @howmuch=20000
update bank set rmbnum=rmbnum-@howmuch where username='張三'
update bank set rmbnum=rmbnum+@howmuch where username='李四'
-- 以上過程前者失敗後者成功。因為張三賬戶余額不足。
/*
事務的格式:
Begin TransAction --開始事務傳輸
Commit TransAction --提交事務
RollBack TransAction --回滾事務
*/
update bank set rmbnum=10000
set nocount on -- 設置不顯示影響的行數
print('查看轉賬前帳戶余額:')
Select * From bank
Begin TransAction
declare @errno int
declare @num int
set @errno=0
set @num=100000
--將王五的帳戶減少@num
Update Bank set rmbnum=rmbnum-@num where username='王五'
set @errno=@errno+@@error --加上執行過程中產生的錯誤編號
-- 將小兒的帳戶增加@num
update bank set rmbnum=rmbnum+@num where username='小兒'
set @errno=@errno+@@error
-- 根據是否產生錯誤決定事務是提交還是撤銷
If @errno>0
begin
print('事務處理失敗,回滾事務!')
rollback TransAction
end
Else
Begin
print('事務處理成功,提交事務!')
Commit TransAction
End
print('查看轉賬後庄戶余額:')
Select * From Bank
Ⅳ 對於已經執行成功的sql命令,如何回滾
mysql命令行下怎樣實現數據的回滾操作
在MySQL有時執行了錯誤的update或者delete時導致大量數據錯誤恢復的辦法。執行時沒有開啟事務,也沒有對數據進行。這時就需要使用到sqlbinlog工具。
sqlbinlog需要開啟,具體的打開方法就不說了。
使用sqlbinlog會產生bin文件,恢復就需要用到這些文件。文件中記錄著資料庫的所有操作。(此方法的操作是將資料庫之前所執行的語句重新執行一次,以達到恢復效果)
具體步驟:1,先找到bin文件,一般都是在mysql的data文件夾中,結尾以.00000X等形式結束。
2,尋找需要還原的時間點 使用語句 mysqlbinlog 文件名 例(MySQLbinlog xxbin.000001)來查看內容,然後找到對應的具體時間
3,導出sql語句,使用語句 mysqlbinlog 文件名>sql文件路徑 例(mysqlbinlog xxxbin,00001>>a.sql | mysql -u root -p )
如果需要指定時間導出--start--date -stop='' --date='' 來導出指定時間執行的語句例(sqlbinlog --start-stop='2015-11-22 10:00:00' xxbin.000001>a.sql | mysql -u root -p )這句意思是導出在2015-11-22 10點之前的語句,反之start是導出時間之後的。 start和stop可以同時使用。
如果存在多個bin文件,則按照需要導出。
4,使用mysql將導出的語句執行一次。
Ⅳ SQL語言中,用於事務回滾的語句是什麼
回滾要放抄在事務裡面進行,才能進行回滾;sql裡面的事務使用關鍵字TransAction
1:可以用try catch捕獲
begin try
begin tran
update table set a=1;
commit tran
end Try
begin catch
rollback tran
end catch
2:可以使用error 全局變數
begin tran
update tablename set ad=1111
if @@error<>0 begin rollback end
commit tran
注意:如果一個事務寫了 begin trans ,後面一定要跟上 commit tran或 rollback transaction ,否則可能導致被鎖
Ⅵ sql server事務回滾代碼怎麼寫
事務回滾有幾種,下面只是常見的一種
declare@iErrorCountint
set@iErrorCount=0
begintranTran1
insertintot1(Id,c1)values(1,'1')
set@iErrorCount=@iErrorCount+@@error
insertintot1(Id,c1)values('XX2','2')
set@iErrorCount=@iErrorCount+@@error
if@iErrorCount=0
begin
COMMITTRANTran1--執行事務
end
else
begin
ROLLBACKTRANTran1--回滾事務
end
Ⅶ sql 回滾語句
這種情況的數據恢復只能利用事務日誌的備份來進行,所以如果你的SQL沒有進行相應的全庫備份
或不能備份日誌(truncate log on checkpoint選項為1),那麼就無法進行數據的恢復了,或者
只能恢復到最近一次的備份的數據了。
以下簡單說明恢復數據方法:
1,如果誤操作之前存在一個全庫備份(或已有多個差異備份或增量備份),首先要做的事就是進
進行一次日誌備份(如果為了不讓日誌文件變大而置trunc. log on chkpt.選項為1那你就死翹了)
backup log dbName to disk='fileName'
2,恢復一個全庫備份,注意需要使用with norecovery,如果還有其他差異或增量備份,則逐個恢
復
restore database dbName from disk='fileName' with norecovery
3,恢復最後一個日誌備份即剛做的日誌備份,指定恢復時間點到誤操作之前的時刻
restore log dbName from disk='fileName'
with stopat='date_time'
以上這些操作都可以在SQL SERVER企業管理器里完成,難度不大。。。
當然,如果誤操作是一些不記日誌的操作比如truncate table,select into等操作,那麼是無法利
用上述方法來恢復數據的...
Ⅷ sql中的存儲過程里怎麼寫事務回滾啊
CREATE PROC [dbo].[notice_Delete] --- 同時刪除該通知書和對應的節點
@tbl VARCHAR(30),
@pid INT
AS
BEGIN
DECLARE @tblname VARCHAR(30) ;
DECLARE @sql VARCHAR(1000) ;
SET @tblname = @tbl
SET @sql = 'delete ' + @tblname + ' where id ='
+ CONVERT(VARCHAR(10), @pid)
BEGIN TRAN --開始事務
EXEC ( @sql
)
IF ( @@rowcount = 0 ) --執行結果影響行數為0
BEGIN
ROLLBACK TRAN --回滾
END
ELSE
BEGIN
DELETE FROM tbl_treenotice
WHERE purposeid = @pid
IF ( @@rowcount = 0 ) --執行結果影響行數為0
BEGIN
ROLLBACK TRAN --回滾
END
ELSE
BEGIN
COMMIT TRAN --提交事務
END
END
END
Ⅸ sql語句中用什麼語句實現事務的回滾
-開啟事務 begin tran --執行操作 update Accounts_UsersExp set TelPhone=123456 where userid=14 --執行錯誤事務回滾 rollback --如果正內確進行事容務提交 commit
Ⅹ 資料庫(sql server )回滾事務
這個要求不需要用事務回滾的吧。
insert
中加上判斷該工號記錄數的條件即可,保證當記錄數少於4時執行插入語句。
insert
()
values()
where(select
count(*)
from
table
where
emp_id=『20100021』)<4