web-dev-qa-db-ja.com

MySQLに複数の挿入行のIDを取得するにはどうすればよいですか?

このコマンドを使用して、2列のテーブルにいくつかの単語を挿入しています。

INSERT IGNORE INTO terms (term) VALUES ('Word1'), ('Word2'), ('Word3');
  1. 各Wordが挿入されている行のID(プライマリキー)を取得するにはどうすればよいですか。 INSERTを実行した後、「55,56,57」のような値を返します。 MySQLにはそのような応答がありますか?

  2. 用語列はUNIQUEです。用語がすでに存在する場合、MySQLはその用語を挿入しません。この複製の参照(つまり、用語が存在する行のID)を返すことは可能ですか? 「55、12、56」のような応答。

36
Googlebot
  1. SELECT LAST_INSERT_ID(); を介して、またはフレームワーク/ MySQLライブラリ(どの言語でも)を呼び出して mysql_insert_id() を取得します。

  2. それは機能しません。そこで、挿入後にIDを照会する必要があります。

35
glglgl

なぜだけではありません:

SELECT ID
  FROM terms
 WHERE term IN ('Word1', 'Word2', 'Word3')
2
mellamokb

まず、挿入したばかりのIDを取得するには、次のようなものを作成できます。

SELECT LAST_INSERT_ID() ;

注意、これは最後のINSERTクエリの後にのみ機能し、複数の挿入がある場合は最初のIDのみを返します!

次に、IGNOREオプションを使用すると、挿入されなかった行を取得できるとは思いません。 INSERT IGNORE、重複するエントリを作成する必要がある行を無視するようにMySQLに指示します。

このオプションを指定しないと、INSERTが停止し、複製に関係する行ができます。

1
Nugget