1

MySQL クエリをループしてはならない理由を理解しており、それを回避しようとしています。$namesに挿入するキーワードのリストを含む配列があり、MySQL フィールドに制約がありsomeTableます。UNIQUEname

mysql> select * from someTable where name='stress';
+-----+--------+
| id  | name   |
+-----+--------+
| 143 | stress |
+-----+--------+
1 row in set (0.00 sec)

mysql> insert into someTable (name) values ('stress');
ERROR 1062 (23000): Duplicate entry 'stress' for key 'name'
mysql>

ループを避けるために、次のタイプのクエリをお勧めします。

$result = mysql_query("insert into someTable (name) values ('firstName'), ('secondName'), ('thirdName')");

ただし、いずれかの名前が既に存在する場合、値は挿入されません。さらに、 の値は$resultになりますFALSE値を挿入するための単一のクエリを作成するにはどうすればよいですか?それらのいずれかが存在しても失敗せず、それらのTRUEいずれかが挿入された場合に返されますか?

このためのストアド プロシージャを記述できることはわかっていますが、それではループが PHP から MySQL に移動するだけです。何も節約していないように見える帯域幅(これはローカルホスト上にあるため重要ではありません)以外。

4

2 に答える 2

4
INSERT IGNORE INTO someTable (name) values ('firstName'), ('secondName'), ('thirdName')

重複がある場合は、無視して続行します。

于 2012-10-24T18:05:33.303 に答える
3

無視してください。

例: insert ignore into someTable (name)...

于 2012-10-24T18:05:34.787 に答える