繁体   English   中英

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

[英]mysql how to use two field as primary key and unique

在 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 和电子邮件)具有唯一性?

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

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

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

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

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");

谢谢你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM