0

MySQLデータベースには「messages」と「message_tags」の2つのテーブルがあります。「messages」テーブルには、自動インクリメント列「message_id」があります。Javaでは、java.sqlパッケージを使用してデータベースにメッセージのバッチを追加したいと思います。クエリを保存するために、これを1つのトランザクションで実行したいと思います。

私のSQLコードは次のようになります。

START TRANSACTION
INSERT INTO messages(`message`) VALUES ('message1');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo1');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagbar1');
INSERT INTO messages(`message`) VALUES ('message2');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo1');
INSERT INTO messages(`message`) VALUES ('message3');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo2');
...
COMMIT

メッセージテーブルから新しく生成されたすべてのIDを、元のメッセージと一致させることができる方法でJavaに戻すことは可能ですか?このようなもの:

message1 => 1234
message2 => 1235
message3 => 1236
...
4

1 に答える 1

2

静的か動的かを指定しませんでしたが、次のようなものを使用できると思います。

START TRANSACTION
INSERT INTO messages(`message`) VALUES ('message1');
@message1:=last_insert_id();
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo1');
@message2:=last_insert_id();
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagbar1');
@message3:=last_insert_id();
INSERT INTO messages(`message`) VALUES ('message2');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo1');
@message4:=last_insert_id();
INSERT INTO messages(`message`) VALUES ('message3');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo2');
@message5:=last_insert_id();
...
COMMIT

あなたが作るなら

select @message1;

結果は1234になるので、次のようになります。

@message1 => 1234
@message2 => 1235
@message3 => 1236
...

ただし、少なくともプロシージャまたは関数を作成するには、SQL変数を手動で指定する必要があります。

于 2012-05-25T13:43:18.733 に答える