mysql如何使用两个字段作为主键和唯一

时间:2015-07-30 08:53:24

标签: mysql sql

在MySQL数据库中,我有数据

create table student(user_id int(20) unsigned NOT NULL AUTO_INCREMENT,
name varchar(20),
email varchar(20),
primary key(user_id,email));

我想使用user_idemail字段应该是唯一值。 我还添加了

alter table student add unique unique_index (user_id,email);

但仍然接受所有条目

mysql> insert into student (name, email) values ("a", "aa", "aa");
Query OK, 1 row affected (0.06 sec)

mysql> insert into student (name, email) values ("a", "aa", "aa");
Query OK, 1 row affected (0.06 sec)



 select * from student;
+---------+------+-------+
| user_id | name | email |
+---------+------+-------+
|       1 | a    | aa    |
|       2 | a    | aa    |
+---------+------+-------+
2 rows in set (0.00 sec)

如何将这些字段(ID和电子邮件)设为唯一?

2 个答案:

答案 0 :(得分:1)

由于我对您的要求的理解是正确的,您必须添加到唯一索引:

alter table student add unique unique_index (user_id);
alter table student add unique unique_index_email (email);

您的语句将创建一个索引,其中user_id和email的组合是唯一的!

答案 1 :(得分:1)

你可以这样使用。这里每个唯一的索引名称都应该不同。

CREATE TABLE student(user_id INT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
email VARCHAR(20),
PRIMARY KEY(user_id,email));

创建唯一索引。

ALTER TABLE student ADD UNIQUE unique_index1 (user_id);
ALTER TABLE student ADD UNIQUE unique_index2 (email);

插入数据:

INSERT INTO student (`name`, email) VALUES ("a", "aa");

执行以下SQL会产生错误。

INSERT INTO student (`name`, email) VALUES ("a", "aa");

谢谢。