MySQLテーブルip_list
...があります。
+----+---------------+
| id | ip_addr |
+----+---------------+
| 1 | 192.168.100.1 |
| 2 | 192.168.100.2 |
| 3 | 192.168.100.3 |
| 4 | 192.168.100.4 |
| 5 | 192.168.100.5 |
+----+---------------+
ip_addr
列にないレコードのみを追加します。 例
ip_addr
テーブルに追加する次のレコードがあります
192.168.100.6
192.168.100.10
192.168.100.11
192.168.100.1 //already in column
192.168.100.12
192.168.100.1
は既に列にあるため、追加したくありません。
では、INSERT
クエリが最初にレコードを確認してから挿入することは可能ですか?
現在、私はこれを使っています。最初にレコードをSELECT
照合し、次にそれを照合し、次にINSERT
を照合します。
しかし、私は1つのクエリのみで処理したいと考えています。
以下のクエリを使用できます。ここでは、テーブルに存在しない場合にip_addressを挿入します。
INSERT INTO ip_list (ip_addr)
SELECT * FROM (SELECT '192.168.100.1') AS tmp
WHERE NOT EXISTS (
SELECT ip_addr FROM ip_list WHERE ip_addr='192.168.100.1'
);
ip_addr
にUNIQUEキーを追加してから、INSERT IGNORE
を使用する必要があります。
UNIQUE
をまだ聞いていない場合は、これが役立つかもしれません: http://www.tutorialspoint.com/sql/sql-unique.htm
私があなたなら、列にUNIQUE
制約を強制します。
ALTER TABLE ip_list ADD CONSTRAINT IP_Unique UNIQUE(ip_addr)
MySQL INSERT IGNORE ステートメントを試してください。