MySQL - Tạo một trường duy nhất hiện có


155

Tôi có một bảng đã có sẵn với một trường nên là duy nhất nhưng không phải. Tôi chỉ biết điều này bởi vì một mục được tạo vào bảng có cùng giá trị với mục khác, đã tồn tại, và điều này gây ra vấn đề.

Làm cách nào để làm cho trường này chỉ chấp nhận các giá trị duy nhất?

Câu trả lời:


292
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

Đối với MySQL 5.7.4 trở lên:

ALTER TABLE mytbl ADD UNIQUE (columnName);

Kể từ MySQL 5.7.4, mệnh đề IGNORE cho ALTER TABLE bị xóa và việc sử dụng nó tạo ra lỗi.

Vì vậy, hãy đảm bảo xóa các mục trùng lặp trước vì từ khóa IGNORE không còn được hỗ trợ.

Tài liệu tham khảo


62
+1 If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. Tài liệu
Scrum Meister

1
Có cách nào để bảo nó xóa các hàng dựa trên một tiêu chí nhất định không? Hoặc bạn sẽ cần phải thực hiện một số tiền xử lý trước khi ALTERthực hiện điều này.
corsiKa

7
ALTER IGNOREvẫn có thể đưa ra lỗi trùng lặp trên phiên bản MySQL> 5.5 và trên InnoDB vì mục đích an toàn cho dữ liệu của bạn. Nếu bạn chắc chắn rằng việc giữ hàng đầu tiên trong các hàng trùng lặp là điều đúng đắn, hãy thử set session old_alter_table=1. Đừng quên đặt lại. mysqlolyk.wordpress.com/2012/02/18/ từ
michaelliu

2
Đối với bất kỳ ai vấp phải điều này bằng cách sử dụng 5.6.7 trở lên, IGNORE không còn được hỗ trợ. moredocs Tôi đoán cách để làm điều đó bây giờ là đảm bảo bạn không có bản sao trước, phải không?
William T. Mallard

1
Hãy chắc chắn tạo một bản sao lưu của bảng trước khi bạn chạy truy vấn này. Nó sẽ xóa tất cả các hàng trừ cái đầu tiên nếu tên cột có cùng giá trị hoặc trống.
ổn định vào

34

Chỉ cần viết truy vấn này trong db phpmyadmin của bạn.

ALTER TABLE TableName ADD UNIQUE (FieldName)

Ví dụ: ALTER TABLE user ADD UNIQUE (email)


16

Nếu bạn cũng muốn đặt tên cho ràng buộc, hãy sử dụng:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

7

CREATE UNIQUE INDEX foo ON table_name (field_name)

Bạn phải xóa các giá trị trùng lặp trên cột đó trước khi thực hiện sql đó. Bất kỳ giá trị trùng lặp hiện có nào trên cột đó sẽ dẫn bạn đến lỗi mysql 1062


4

Cách dễ nhất và nhanh nhất sẽ là với bảng cấu trúc phpmyadmin.

SỬ DỤNG QUẢNG CÁO PHPMYADMIN!

Có tiếng Nga nhưng phiên bản tiếng Anh nên giống nhau. Chỉ cần nhấp vào nút Unique. Cũng từ đó, bạn có thể làm cho các cột của mình CHÍNH XÁC hoặc XÓA.


2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

là câu trả lời đúng

phần chèn

INSERT IGNORE INTO mytable ....

1

Mã này là để giải quyết vấn đề của chúng tôi để đặt khóa duy nhất cho bảng hiện có

alter ignore table ioni_groups add unique (group_name);

Nhưng loại bỏ tất cả các bản sao bao gồm cả các bản sao bên ngoài các cột
Biasi Wiga
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.