0
不工作我寫了一個存儲過程,我把一開始這些語句:Mysql的事務存儲過程中
SET autocommit = 0;
START TRANSACTION READ WRITE;
我完成與COMMIT;
聲明。
但交易不起作用。
你能幫忙嗎?
更新1:
難道這指令
SET @now = unix_timestamp() * 1000;
事業的一個隱含的承諾?
更新2:我的代碼是這樣的
CREATE PROCEDURE stored_proc()
SQL SECURITY DEFINER
BEGIN
SET autocommit = 0;
START TRANSACTION;
DELETE FROM `TABLE1` WHERE `COLUMN1` = value;
INSERT INTO TABLE1...
SET @now = unix_timestamp() * 1000;
DELETE FROM TABLE2 WHERE COLUMN2 = value;
INSERT INTO `TABLE2` ...;
COMMIT;
END
我有顯示錶TABLE2的數據的IHM。我注意到當存儲過程運行時,IHM顯示空值。這意味着承諾作出後第二DELETE和INSERT前
更新3
select @@tx_isolation;
給我REPEATABLE-READ
和show create table table2
給我engine = InnoDB
的結果結束
你在使用InnoDB嗎? MyISAM不執行事務。 – Barmar
是的,我正在使用innodb。 – Aniss
當你說它「不能工作」時會發生什麼,而你怎麼知道它不工作?您的代碼在更新中不會導致隱式提交,例如任何ddl代碼(比如'alter table')都會這樣做。你應該添加你的整個過程(你可以縮寫,確切的代碼是不相關的,例如只是寫'select ...'),並描述什麼(不)發生,你期望什麼。順便說一句,你不需要使用'set autocommit = 0'開始一個事務,'start transaction'用來啓動一個事務。 'commit'不會將'autocommit'重置爲1,所以您現在需要一個'commit'。 – Solarflare