sql >> Databasteknik >  >> RDS >> Mysql

Bästa sättet att undvika dubbla inträde i mysql-databasen

Första steget skulle vara att sätta en unik nyckel på bordet:

ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);

Sedan måste du bestämma vad du vill göra när det finns en dubblett. Bör du:

  1. ignorera det?

    INSERT IGNORE INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo");
    
  2. Vill du skriva över den tidigare inmatade posten?

    INSERT INTO thetable (pageid, name, somefield)
    VALUES (1, "foo", "first")
    ON DUPLICATE KEY UPDATE (somefield = 'first')
    
    INSERT INTO thetable (pageid, name, somefield)
    VALUES (1, "foo", "second")
    ON DUPLICATE KEY UPDATE (somefield = 'second')
    
  3. Uppdatera någon räknare?

    INSERT INTO thetable (pageid, name)
    VALUES (1, "foo"), (1, "foo")
    ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)
    


  1. Lägga till en frågetips när du anropar tabellvärderad funktion

  2. Hur man återställer förtroende för en främmande nyckelbegränsning i SQL Server (T-SQL-exempel)

  3. Motsvarar LIMIT och OFFSET för SQL Server?

  4. LEFT JOIN vs. LEFT OUTER JOIN i SQL Server