23

私は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つのクエリだけでやりたいです。

4

5 に答える 5

26

以下のクエリを使用できます。ここでは、テーブルに存在しない場合に 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'
);
于 2013-04-09T09:46:44.923 に答える
8

UNIQUE キーを追加してip_addrから使用する必要がありますINSERT IGNORE

まだ聞いたことがない場合は、これが役立つかもしれUNIQUEません: http://www.tutorialspoint.com/sql/sql-unique.htm

于 2013-04-09T09:45:54.917 に答える
4

私があなたならUNIQUE、列に制約を課します。

ALTER TABLE ip_list ADD CONSTRAINT IP_Unique UNIQUE(ip_addr)
于 2013-04-09T09:46:48.400 に答える
4

Insert...on duplicate key update でそれを行うことができます

また

または、置換を使用することもできます

于 2013-04-09T09:46:54.387 に答える
3

MySQL INSERT IGNOREステートメントを試してください。

于 2013-04-09T09:47:04.093 に答える