2011-08-26 25 views
5

Tôi chèn một số dữ liệu vào một bảng, nhưng đôi khi nó xung đột với các dữ liệu khác trong bảng (ví dụ: nó có cùng khóa chính).
Tôi muốn có thể chỉ ghi đè lên dữ liệu này nếu nó ở đó, thay vì có mysql gửi cho tôi một thông báo lỗi nói rằng họ là một khóa chính trùng lặp. Tôi biết rằng tôi chỉ có thể xóa các giá trị này trước khi bàn tay, nhưng nó sẽ có một truy vấn khá lớn.
Có thể ghi đè lên bằng cách nào đó và ngăn chặn bất kỳ cảnh báo nào hoặc tôi buộc phải xóa các giá trị này.Chèn vào bảng mysql và ghi đè bất kỳ dữ liệu hiện tại

Trả lời

13

chỉ là một chút cheatsheet
Mysql có 3 kịch bản khác nhau trong việc xử lý các bản sao khóa chính:
nếu bạn muốn ...

  • không làm gì cả - sử dụng INSERT IGNORE
  • xóa hiện có và tạo mới - sử dụng REPLACE INTO
  • cập nhật hiện tại - sử dụng ON DUPLICATE UPDATE
2

Bạn có thể sử dụng REPLACE INTO trong MySQL để thực hiện việc này.

REPLACE INTO table 
SET name = 'Treffynnon' 
+3

Tôi thích quảng cáo tự xấu hổ. –

3

MySQL có một "INSERT ... ON DUPLICATE KEY UPDATE" lệnh. Bạn có thể tìm thấy nó ở đây: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

INSERT INTO `table` VALUES ('a', 'b') ON DUPLICATE KEY UPDATE `field1`='a', `field2`='b' 
+2

'trường dữ liệu = VALUES (trường)' là một lựa chọn tốt hơn - giúp bạn tiết kiệm được việc phải sử dụng dữ liệu hai lần trong truy vấn. Hàm values ​​() sẽ kéo nó từ phần chèn của câu lệnh cho bạn, vì vậy dữ liệu của bạn chỉ đi vào chuỗi truy vấn một lần. –

Các vấn đề liên quan