2011-07-31 43 views
6

Ngay bây giờ tôi có:ON DUPLICATE KEY: nhiều cột hạn chế duy nhất

INSERT INTO mytable (a,b,c,d) VALUES(1,2,3,4) 
    ON DUPLICATE KEY UPDATE c=VALUES(c),d=VALUES(d) 

mà hoạt động nếu a hoặc bUNIQUE phím ...

Nhưng bây giờ tôi muốn cập nhật chỉ khi hàng khác với cặp (a, b) không tồn tại trong bảng (nếu không bỏ qua chèn).

Về cơ bản (a,b) shoud được UNIQUE, không (a) hoặc (b), nhưng cả hai kết nối.

Ví dụ những hàng này sẽ có giá trị

ID (auto-inc) | a | b | c | d 
      0 | 5 | 1 | 343 |466 
      1 | 5 | 2 | 363 |466 
      2 | 5 | 3 | 343 |496 
      3 | 7 | 1 | 343 |496 

Bởi vì có 5,1, 5,2, 5.3, 7.1, vv

Nhưng hàng # 2 ở đây nên được coi là bản sao của hàng # 1, vì vậy hàng # 1 cần được cập nhật:

ID (auto-inc) | a | b | c | d 
      0 | 5 | 1 | 343 |466 
      1 | 5 | 1 | 363 |466 
      2 | 5 | 3 | 343 |496 
      3 | 7 | 1 | 343 |496 

Điều này có khả thi không?

Trả lời

13

làm UNIQUE KEY-(a,b) không b

ALTER TABLE tblname ADD UNIQUE (a,b) 
+0

lol cảm ơn, tôi không thể tin rằng tôi rất câm :) – Emma

1
CREATE UNIQUE INDEX index_unique_on_a_and_b ON mytable (a,b) 
1

Nó đáng chú ý là nếu bạn cố gắng thêm ADD UNIQUE (a, b) khi có dữ liệu trong bảng, bạn sẽ có khả năng gặp lỗi khóa trùng lặp. Làm trống bảng, thêm chỉ mục duy nhất và nó sẽ hoạt động.

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