我正在閱讀有關回滾事務的文章,找不到像我需要的內容。假設我有一個用戶表。用戶可以更新他/她的記錄,但如果輸入值爲空,我想要回滾。我知道有很多簡單的方法可以做到這一點,比如使用c#進行檢查,如果它是空的,那麼這裏指的是理解回滾。如何在if(null)代碼中使用回滾?回滾如果爲空
Q
回滾如果爲空
0
A
回答
2
回滾與事務一起使用,回滾將狀態恢復到執行開始tran時的狀態。
BEGIN TRAN 'tran1'
INSERT INTO Whatever table...
IF(... check for null)
BEGIN
ROLLBACK TRAN 'tran1'
RETURN 0
END
COMMIT TRAN 'tran1'
2
有三種方法。首先,如果你的檢查只是在一列,請在列定義的約束check
:
create table test (
age int check (age > 40),
...
);
富勒更復雜的約束,你需要triggers
。可用觸發器的類型取決於技術(oracle,sql server,mysql)。在之前插入或之前更新觸發器,您可以生成一個異常,它將自動結束事務(相當於回滾)。這裏是一個MySQL例如:
delimiter //
drop trigger if exists trg_trigger_test_ins //
create trigger trg_trigger_test_ins before insert on test
for each row
begin
declare msg varchar(128);
if new.age <= 40 then
set msg = concat('MyTriggerError: age incorrect : ', cast(new.id as char));
signal sqlstate '45000' set message_text = msg;
end if;
end
//
最後,你就可以開始交易,進行更改,然後決定是否要提交或回滾。
0
要回滾事務,您必須先啓動事務。通常,DBMS具有隱式事務,如果沒有指定,每個語句或批處理都會啓動並提交/回滾它自己的事務。或者你可以明確定義事務邊界。
因此,如果您需要任何涉及將給定列設置爲NULL以便失敗並回滾的任何(隱式顯式)事務,那麼只需在此列上定義約束。
或者,您可能只想要一些顯式事務回滾,具體取決於此列值和其他一些條件。所以你應該明確地在你的代碼中進行檢查。
相關問題
- 1. 如果爲空返回0
- 2. SQL返回值如果不爲空,則返回零,如果爲空
- 3. PHP如果變量不爲空,回顯
- 4. SQLite - 如果爲空返回0
- 5. 如果爲空,則返回多個值
- 6. 驗證回發如果gridview爲空
- 7. 如果函數值爲空則返回
- 8. 如果變量爲空,則回退
- 9. 如果遊標爲空/空
- 10. 如果事務回滾,CompassGps會回滾嗎?
- 11. Odoo - 如果爲空
- 12. 如果INT爲空
- 13. 如果值爲空
- 14. 空條件運算符是否返回false如果爲空?
- 15. 如果公式的一部分爲空,則返回空白
- 16. 如果字段爲空或空白,則返回所有行
- 17. Mysql如果爲空結果返回默認值
- 18. 如果結果爲空,則回顯未找到
- 19. 如果沒有返回結果,則設置爲空EntityFramework
- 20. 如果沒有行返回,返回空值爲NULL的行
- 21. PHP如果爲空回聲其他回聲
- 22. Kotlin設置爲空如果不爲空
- 23. 我不能回滾滾動的效果
- 24. 爲什麼ezSQL返回空結果集
- 25. Jmeter聲明返回結果不爲空或爲空
- 26. 如果塊事務不能回滾sql
- 27. 自動回滾,如果程序退出
- 28. 回滾,如果一個操作失敗
- 29. Django的返回屬性,如果不爲空else返回方法的結果
- 30. 返回空結果?
爲什麼不簡單地NOT NULL列? – jarlh
就像我說的那樣做有很多方法,而不是null是其中之一,但我需要一個回滾的例子與if。它可以是'如果年齡<40然後回滾'。檢查null只是一個示例@jarlh –
請標明您正在使用的語言和您嘗試使用的任何代碼。 –