Mysql
 sql >> база данни >  >> RDS >> Mysql

Python mysql проверява за дубликат преди вмъкване

Можете първо да разберете дали е там чрез SELECT ing от url , или можете да направите 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ограничаване на производителността на Mysql

  2. MySQL utf8mb4, Грешки при запазване на Emojis

  3. Python MySQL - SELECTs работят, но не и DELETE?

  4. Синтактична грешка на MySQL. Не мога да го реша

  5. Изглежда, че уеб приложението [] е стартирало нишка с име [нишка за почистване на изоставена връзка] com.mysql.jdbc.AbandonedConnectionCleanupThread