2016-11-24 81 views
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-READshow create table table2給我engine = InnoDB的結果結束

+0

你在使用InnoDB嗎? MyISAM不執行事務。 – Barmar

+0

是的,我正在使用innodb。 – Aniss

+0

當你說它「不能工作」時會發生什麼,而你怎麼知道它不工作?您的代碼在更新中不會導致隱式提交,例如任何ddl代碼(比如'alter table')都會這樣做。你應該添加你的整個過程(你可以縮寫,確切的代碼是不相關的,例如只是寫'select ...'),並描述什麼(不)發生,你期望什麼。順便說一句,你不需要使用'set autocommit = 0'開始一個事務,'start transaction'用來啓動一個事務。 'commit'不會將'autocommit'重置爲1,所以您現在需要一個'commit'。 – Solarflare

回答

0

的問題是,在我的java代碼,我有

<Resource username="$user" url="$url" type="javax.sql.DataSource" password="$pwd" name="$jndi" maxWait="-1" maxIdle="$idle" maxActive="$max" driverClassName="com.mysql.jdbc.Driver" defaultTransactionIsolation="READ-UNCOMMITTED" /> 

我用defaultTransactionIsolation =「REPEATABLE_READ」更新ks非常多@Solarflare爲您提供幫助。我沒有想過隔離級別。