SELECT
を使用して、最初にそこにあるかどうかを確認できます。 url
によるing 、またはurl
を作成できます 一意のフィールド:
CREATE TABLE IF NOT EXISTS kompas_url
...
url VARCHAR(1000) UNIQUE,
...
)
これにより、MySQLが重複する行を挿入するのを防ぎますが、挿入しようとするとエラーも報告されます。これは良くありません。エラーを処理することはできますが、他の人を偽装する可能性があります。これを回避するには、ON DUPLICATE KEY UPDATE
を使用します 構文:
INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()
これにより、UPDATE
を提供できます 一意のフィールドに値が重複している場合のステートメント(これには主キーを含めることができます)。この場合、おそらくmodified_date
を更新する必要があります 現在の日付のフィールド。
編集: 〜unutbu
によって提案されたように 、重複で何も変更したくない場合は、INSERT IGNORE
を使用できます 構文。これは単純に次のように機能します:
INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
これにより、特定の種類のエラーが警告に変わります。最も便利なのは、一意のエントリが重複していることを示すエラーです。キーワードIGNORE
を配置した場合 ステートメントに含めると、エラーは発生しません。クエリは単に削除されます。複雑なクエリでは、これによって役立つ可能性のある他のエラーも非表示になる可能性があるため、コードを使用する場合は、コードが正しいことを二重に確認することをお勧めします。