2012-02-08 127 views
12

Tôi có một bảng 'người dùng' cơ bản mà tôi muốn tạo trong MySQL.Sự khác nhau giữa UNIQUE, UNIQUE KEY và CONSTRAINT 'name' UNIQUE là gì?

Tôi không muốn các email trùng lặp hoặc tên người dùng trùng lặp xuất hiện trong cơ sở dữ liệu.

  • Cách tốt nhất để ngăn chặn điều này khi tạo bảng là gì?
  • Và sự khác biệt giữa những điều sau đây là những gì:

1. UNIQUE (username), UNIQUE (email),

2. KEY UNIQUE (username), UNIQUE KEY (email),

3. CON _login UNIQUE (tên người dùng, email),

Tôi giả định một số trong số này là đồng nghĩa, nhưng tôi đã đọc thông tin xung đột trực tuyến và đang tìm kiếm xác nhận.

Tôi hy vọng ai đó có thể hỗ trợ.

Các SQL:

CREATE TABLE users (
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
username VARCHAR(30) NOT NULL, 
pass CHAR(40) NOT NULL, 
first_name VARCHAR(20) NOT NULL, 
last_name VARCHAR(40) NOT NULL, 
email VARCHAR(60) NOT NULL, 
registration_date DATETIME NOT NULL, 
user_level TINYINT(1) UNSIGNED NOT NULL DEFAULT 0, 
active CHAR(32), 
PRIMARY KEY (user_id), 
UNIQUE (username), 
UNIQUE (email), 
INDEX login (email, pass), 
INDEX full_name (last_name, first_name) 
) ENGINE=INNODB; 
+0

ps: chỉ mục cho email, vượt qua có thể sẽ chỉ làm mọi thứ chậm hơn. Ràng buộc duy nhất trên email có thể hoạt động như một chỉ mục bình thường. Lựa chọn trên email sẽ trả về tối đa 1 hàng nên không cần phải lập chỉ mục khi vượt qua. –

Trả lời

14

1 và 2 là ide ntical - cả hai tạo ra hai chỉ mục duy nhất, một cho mỗi khóa. # 3 chỉ tạo một chỉ mục duy nhất trên cả hai khóa, do đó không có sự kết hợp tên người dùng và email có thể được sao chép, nhưng ví dụ: tên người dùng có thể được sao chép miễn là một email khác được sử dụng.

Có vẻ như bạn có thể muốn một trong hai người đầu tiên. UNIQUE và UNIQUE KEY là tương đương.

+0

Hoàn hảo, cổ vũ cho thông tin! – leokennedy

1

Họ đều là đồng nghĩa với bằng chứng là syntax documentation:

[CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option]

[] trong ký hiệu này (Wirth's notation) biểu thị các yếu tố bắt buộc

+2

Thứ ba là một khóa phức tạp trên nhiều trường, trái với hai phím riêng biệt. –

+0

Thật vậy ... Tôi đã không nhận thấy rằng trong câu hỏi. – Mchl

+1

Cảm ơn liên kết mà cú pháp tạo bảng MySQL đang bắt đầu có ý nghĩa hơn bây giờ. – leokennedy

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