Trước tiên, bạn có thể tìm hiểu xem nó có ở trong đó hay không, bằng cách SELECT
nhập bởi url
hoặc bạn có thể tạo url
trường duy nhất:
CREATE TABLE IF NOT EXISTS kompas_url
...
url VARCHAR(1000) UNIQUE,
...
)
Điều này sẽ ngăn MySQL chèn một hàng trùng lặp, nhưng nó cũng sẽ báo lỗi khi bạn thử và chèn. Điều này không tốt - mặc dù chúng tôi có thể xử lý lỗi nhưng nó có thể ngụy tạo cho những người khác. Để giải quyết vấn đề này, chúng tôi sử dụng ON DUPLICATE KEY UPDATE
cú pháp:
INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()
Điều này cho phép chúng tôi cung cấp UPDATE
trong trường hợp giá trị trùng lặp trong một trường duy nhất (trường này có thể bao gồm khóa chính của bạn). Trong trường hợp này, chúng tôi có thể muốn cập nhật modified_date
trường với ngày hiện tại.
CHỈNH SỬA: Theo đề xuất của ~ unutbu
, nếu bạn không muốn thay đổi bất kỳ thứ gì trên bản sao, bạn có thể sử dụng INSERT IGNORE
cú pháp. Điều này đơn giản hoạt động như sau:
INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
Điều này chỉ đơn giản là biến một số loại lỗi thành cảnh báo — hữu ích nhất là lỗi cho biết sẽ có một mục nhập duy nhất trùng lặp. Nếu bạn đặt từ khóa IGNORE
vào tuyên bố của bạn, bạn sẽ không gặp lỗi — truy vấn sẽ đơn giản bị loại bỏ. Trong các truy vấn phức tạp, điều này cũng có thể ẩn các lỗi khác có thể hữu ích, vì vậy tốt nhất bạn nên đảm bảo mã của mình đúng nếu bạn muốn sử dụng.