2011-08-09 22 views
5

có cách nào để làm một INSERT nhưng trên khóa DUPLICATE thay vì một bản cập nhật làm một SELECT?Có MySQL .. CHERTN ... VỀ CHỌN TỪ KHÓA?

+0

Trường hợp sử dụng chính xác của bạn cho trường hợp đó là gì? –

+0

... Tại sao? Có 'ON DUPLICATE KEY UPDATE' vì một lý do chính đáng; nếu chèn không thành công, bản cập nhật sẽ có ý nghĩa. Một lựa chọn, mặt khác, sẽ không - và mã làm một chèn sẽ không mong đợi một kết quả thiết lập trở lại. – cHao

+4

@cHao: ví dụ: khi bạn muốn sử dụng id của hàng được chèn/tồn tại, bạn sẽ muốn câu lệnh trả về một giá trị. – Seffix

Trả lời

2

Không có trong một truy vấn, nhưng bạn coul chạy INSERT IGNORE <xxx> và sau đó SELECT <xxx>. Các IGNORE làm cho nó bỏ qua bất kỳ hàng nào sẽ kích hoạt các lỗi khóa trùng lặp thay vì tạm dừng.

0

No. Bạn sẽ phải xem lỗi khóa trùng lặp sau đó phát hành truy vấn SELECT của mình.

Sẽ rất có vấn đề nếu tồn tại từ các truy vấn INSERTUPDATE có nghĩa là sửa đổi dữ liệu và SELECT để trả lại tập kết quả. Tất cả các loại trình điều khiển/giao diện xử lý các trường hợp này khác nhau vì lý do chính đáng.