1

同様のデータを挿入したい2つのテーブルを作成しました。

 CREATE TABLE one(
  one_id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  PRIMARY KEY (one_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

 CREATE TABLE two(
  two_id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  PRIMARY KEY (two_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

毎回挿入を実行します。

そのために、私はトランザクションを使用しています

START TRANSACTION;

SET @name = uuid();

INSERT INTO one(one_id,name) VALUES (Null,@name);

INSERT INTO two(two_id, name) VALUES (Null, @name);

COMMIT;

これは、新しい挿入で新しい値を生成しません。ただし、必要に応じてフィールド名に同じデータを挿入します。

どうすればこれを機能させることができますか?.

4

2 に答える 2

1

そのためにトランザクションに移動する必要はないと思います。テーブルに before insert トリガーを追加するだけです。

何かのようなもの :

CREATE TRIGGER `ONE_TABLE_TRIGG` BEFORE INSERT ON  `one` 
FOR EACH
ROW BEGIN 
SET NEW.name= UUID( );
END ;

それを行う前に、それが null かどうかを確認できます。両方のテーブルでこれを行うと、うまくいくか、1つのトリガーで他のテーブルに挿入が追加されます。

于 2013-07-03T13:25:38.900 に答える
0

同じファイルにいくつかのトランザクションステートメントを持つ複数のステートメントをいくつか持つことで、それほど複雑にせずに解決しました

START TRANSACTION;

SET @name = uuid();

INSERT INTO one(one_id,name) VALUES (Null,@name);

INSERT INTO two(two_id, name) VALUES (Null, @name);

COMMIT;

START TRANSACTION;

SET @name = uuid();

INSERT INTO one(one_id,name) VALUES (Null,@name);

INSERT INTO two(two_id, name) VALUES (Null, @name);

COMMIT;

/* その他 */

于 2013-07-03T13:25:51.540 に答える