2016-11-24 13 views
0

で働いていない私は、ストアドプロシージャを書いて、私が最初にこれらの文を置く:MySQLのトランザクションは、ストアドプロシージャ

SET autocommit = 0; 

START TRANSACTION READ WRITE; 

は私がCOMMIT;文で終了します。

が、トランザクションが動作していません。

お手伝いできますか?

更新1:

はこの命令

SET @now = unix_timestamp() * 1000; 

原因は、暗黙的なコミットをもらえますか?

アップデート2:私のコードは、私は、テーブルTABLE2のデータを表示するIHMを持っているこの

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 

のようなものです。私は、ストアドプロシージャが実行されるとき、IHMがnull値を表示することに気付きました。これは、コミットが二DELETE後とINSERT

前に行われたことを意味アップデート3

select @@tx_isolation;くれREPEATABLE-READshow create table table2を与えてくれengine = InnoDBを与える結果

+0

あなたはInnoDBテーブルを使用していますか? MyISAMはトランザクションを実装しません。 – Barmar

+0

はい私はinnodbを使用しています。 – Aniss

+0

「動作していない」と言ったときにはどうなるのですか?どのように動作していないのですか?更新のコードが暗黙のコミットを引き起こさない。任意のddlコード( 'alter table'のような)がそれを行います。あなたは(あなたが省略でき、正確なコードは関係ありません、例えば単に選択 '書く...')あなたの全体の手順を追加して起こると何を期待する(しない)かを説明すべきです。そして、トランザクションを開始するために '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"で更新しましたあなたの助けのために非常に@Solarflare。私は孤立のレベルについて考えていませんでした。

関連する問題