で働いていない私は、ストアドプロシージャを書いて、私が最初にこれらの文を置く: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-READ
とshow create table table2
を与えてくれengine = InnoDB
を与える結果
あなたはInnoDBテーブルを使用していますか? MyISAMはトランザクションを実装しません。 – Barmar
はい私はinnodbを使用しています。 – Aniss
「動作していない」と言ったときにはどうなるのですか?どのように動作していないのですか?更新のコードが暗黙のコミットを引き起こさない。任意のddlコード( 'alter table'のような)がそれを行います。あなたは(あなたが省略でき、正確なコードは関係ありません、例えば単に選択 '書く...')あなたの全体の手順を追加して起こると何を期待する(しない)かを説明すべきです。そして、トランザクションを開始するために 'set autocommit = 0'を使用する必要はありません。トランザクションを開始するために' start transaction'が使用されます。 'commit'は' autocommit'を1にリセットしないので、今から 'commit'が必要になります。 – Solarflare