このコマンドを使用して、2列のテーブルにいくつかの単語を挿入しています。
INSERT IGNORE INTO terms (term) VALUES ('Word1'), ('Word2'), ('Word3');
各Wordが挿入されている行のID(プライマリキー)を取得するにはどうすればよいですか。 INSERT
を実行した後、「55,56,57」のような値を返します。 MySQLにはそのような応答がありますか?
用語列はUNIQUE
です。用語がすでに存在する場合、MySQLはその用語を挿入しません。この複製の参照(つまり、用語が存在する行のID)を返すことは可能ですか? 「55、12、56」のような応答。
SELECT LAST_INSERT_ID();
を介して、またはフレームワーク/ MySQLライブラリ(どの言語でも)を呼び出して mysql_insert_id()
を取得します。
それは機能しません。そこで、挿入後にIDを照会する必要があります。
なぜだけではありません:
SELECT ID
FROM terms
WHERE term IN ('Word1', 'Word2', 'Word3')
まず、挿入したばかりのIDを取得するには、次のようなものを作成できます。
SELECT LAST_INSERT_ID() ;
注意、これは最後のINSERT
クエリの後にのみ機能し、複数の挿入がある場合は最初のIDのみを返します!
次に、IGNORE
オプションを使用すると、挿入されなかった行を取得できるとは思いません。 INSERT IGNORE
、重複するエントリを作成する必要がある行を無視するようにMySQLに指示します。
このオプションを指定しないと、INSERT
が停止し、複製に関係する行ができます。