Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sử dụng nhiều cột làm mã định danh duy nhất cho mysql

Có, MySQL cung cấp khả năng thực hiện điều này.

ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)

Tôi không biết bạn đang sử dụng bảng này để làm gì, nhưng có vẻ như khóa duy nhất này có thể là một ứng cử viên sáng giá cho khóa chính của bảng. Khóa chính cũng tự động là một khóa duy nhất. Nếu bạn quyết định đặt nó làm khóa chính, hãy làm như sau:

ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)

(Nếu bạn nhận được thông báo lỗi rằng đã có khóa chính, hãy phát hành ALTER TABLE MyTable DROP PRIMARY KEY và sau đó lặp lại lệnh trên.)

Chỉnh sửa: Để trả lời nhận xét của người dùng

Bạn không thể có nhiều hàng với các dòng không phải NULL giống hệt nhau giá trị cho các cột được bao phủ bởi khóa duy nhất. Vì vậy, bạn không thể có hai hàng trong đó group_id = 0 AND user_id = 5 , Ví dụ. 0 là một giá trị. Nhưng nếu bạn đặt một hoặc cả hai cột là vô hiệu, bạn có thể có nhiều hàng giống hệt nhau với vị trí của NULL S. Vì vậy, bạn có thể có hai (hoặc nhiều) hàng trong đó group_id IS NULL AND user_id = 1234 .

Proviso:Điều trên đúng với cả hai công cụ lưu trữ MySQL thường được sử dụng (MyISAM và InnoDB). MySQL có các công cụ lưu trữ trong đó NULL được coi là một giá trị duy nhất, nhưng có thể bạn đang không sử dụng chúng.

Nếu bạn đặt một hoặc cả hai cột là vô hiệu, thì khóa duy nhất của bạn không thể là khóa chính - khóa chính phải nằm trên các cột NOT NULL .

Giả sử bạn đã đặt khóa này làm khóa chính của mình và bây giờ bạn muốn cho phép NULL trong group_id cột. Tôi không biết loại dữ liệu nào group_id là vào lúc này; Tôi sẽ cho rằng nó hiện tại INT UNSIGNED NOT NULL , nhưng bạn sẽ phải sửa đổi nội dung bên dưới nếu nó không phải là điều này. Bạn sẽ không thể sử dụng khóa này làm khóa chính của mình nữa. Đây là một lệnh bạn có thể chạy để thực hiện các thay đổi mong muốn:

ALTER TABLE MyTable
    DROP PRIMARY KEY,
    MODIFY group_id INT UNSIGNED,
    ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể hiển thị các giá trị được phân tách bằng dấu phẩy trong bảng

  2. Tại sao truy vấn sql này không trả về bất kỳ kết quả nào so sánh các số dấu phẩy động?

  3. Làm thế nào để xây dựng lại một MySQL Slave không nhất quán?

  4. Trừ tháng và ngày mysql

  5. REPLACE không phân biệt chữ hoa chữ thường trong MySQL?