sql >> データベース >  >> RDS >> Mysql

Python mysqlは、挿入前に重複をチェックします

    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を配置した場合 ステートメントに含めると、エラーは発生しません。クエリは単に削除されます。複雑なクエリでは、これによって役立つ可能性のある他のエラーも非表示になる可能性があるため、コードを使用する場合は、コードが正しいことを二重に確認することをお勧めします。




    1. INSERT IGNORE vs INSERT ... ON DUPLICATE KEY UPDATE

    2. Postgresql集約配列

    3. Django&Postgres-パーセンタイル(中央値)とgroup by

    4. X日の範囲でグループ化