次のように、1 つの列に新しい行を挿入し、別の列で同じ行を参照する 2 つの MySQL ステートメントを作成しようとしています。
あなたが知る必要がある場合に備えて、私はJavaを使用しています/com.mysql.jdbc.Driver
insertNewMessage = connection
.prepareStatement(new StringBuilder(128)
.append("INSERT INTO messages (Message,SHA256) VALUES (?,?);")
.append("INSERT INTO messagelog (MESSAGE_ID,SERVER_ID,CLIENT_ID) VALUES ((SELECT LAST_INSERT_ID()),?,?)")
.toString());
したがって、より明確にするために、私のSQLステートメントは次のとおりです。
INSERT INTO messages (Message,SHA256) VALUES (?,?);
INSERT INTO messagelog (MESSAGE_ID,SERVER_ID,CLIENT_ID) VALUES ((SELECT LAST_INSERT_ID()),?,?)
メッセージ テーブルで作成された新しい ROWID 値を取得し、それをメッセージ ログ テーブルに挿入したいと考えています。
LAST_INSERT_ID()、mysql_insert_id()の両方が機能していないことがわかりました。次の例外がスローされます。
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO messagelog (MESSAGE_ID,SERVER_ID,CLIENT_ID) VALUES ((SELECT LAST_INS' at line 1
MYSQL のドキュメントでは、Last_Insert_ID が機能するはずですが、注意点があると思います。それらの警告が何であるかはわかりません。(はい、ROWID に AI が設定されています)