MySQL 对唯一值的约束

标签 mysql sql database constraints unique

如何在 MySQL 中创建一个带有约束的表,该约束仅适用于 1 个特定表,其中您希望每个唯一记录有 1 个字段是唯一的?

例如,假设我有一个名为“person”的表,其中包含以下字段:

  1. person_social_security(主键)
  2. person_id
  3. 人物名称
  4. person_phone_extension

对于每条记录,我想确保字段 #3 (person_phone_extension) 对于每个 person_id 也始终是唯一的。换句话说,person_id 决不应该有重复的person_phone_extension。但是,不同的 person_id 可以与另一个 person_id 具有相同的 person_phone_extension。此表中可以有多个 person_id 实例。

最佳答案

http://sqlfiddle.com/#!9/df732/2

只需针对您的列设置UNIQUE KEY:

create table person (
person_id int auto_increment primary key,
person_name varchar(50),
person_phone_extension int unique key);

使用我的 fiddle ,您可以查看是否取消注释我的最后一个查询,该查询将带来有关重复值的 mysql 错误。

更新根据您的新评论,person_id不是主键,也不是唯一的。但应检查 person_id+person_phone_extension 的组合。因此,您需要针对这两列设置一个键,例如:

http://sqlfiddle.com/#!9/51547/1

create table person (
person_id int,
person_name varchar(50),
person_phone_extension int,
unique key idx (person_id,person_phone_extension));

关于MySQL 对唯一值的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33681215/

相关文章:

JAVA/Oracle SQL 因阻塞而挂起

php - Codeigniter 3 从表中选择全部但排除当前组 ID

mysql - 试图了解我的页面是否易受攻击

一个数据库中从另一个数据库调用的 SQL 存储过程。背景是什么?

ruby-on-rails - Rails 3.2 具有相同模型名称的多个数据库连接

java - 为什么在尝试对 ResultSet 中检索到的列的值求和时出现错误?

mysql - 处理 10K 插入和频繁选择操作的数据库服务器设置

mysql - 将数组中的值插入数组中的列中?

MYSQL - 给定父ID,检索一列中的所有子ID

SQL 服务器 : NonClustered index not used