2009-05-15 45 views
7

Nếu tôi có truy vấn như thế này, làm cách nào tôi có thể tham chiếu đến giá trị mà tôi đã đưa ra trong câu lệnh cập nhật, để tôi không cần phải chèn cùng một dữ liệu để truy vấn lại? Ví dụ tôi muốn cập nhật giá trị col1 bằng 'xxx', nhưng bây giờ tôi cần nhập lại 'xxx' trong câu lệnh trùng lặp. Có anyway để tham khảo các giá trị trong tuyên bố trùng lặp?MySQL trên cập nhật khóa trùng lặp

INSERT INTO TABLENAME(col1, col2) 
VALUES (’xxx’, ‘yyy’) 
ON DUPLICATE KEY UPDATE col1 = ‘zzz’ 
+0

tôi chỉ để lại này ở đây, giải pháp rất đẹp: http://stackoverflow.com/a/450695/1101589 – Ekonoval

Trả lời

33

này nên làm việc và là một chút tao nhã hơn:

INSERT INTO TABLENAME(col1, col2) 
VALUES (’xxx’, ‘yyy’) 
ON DUPLICATE KEY UPDATE col1 = VALUES(col1) 

Lưu ý rằng bạn không cần phải cập nhật phần quan trọng chính của hàng. Chúng tôi biết điều đó là như nhau bởi vì có một vụ va chạm.

+0

Đó GIÁ TRỊ từ khóa trong dòng cuối cùng là rất quan trọng! – physicalattraction

3

Trong PHP tôi làm điều này để giải quyết vấn đề này:

$fields = "a = 1, b = 2, c = 3"; 
$sql = "INSERT INTO some_table SET id = $id, $fields ON DUPLICATE KEY UPDATE $fields"; 
mysql_query($sql); 
Các vấn đề liên quan