【问题标题】:MySQL Constraint for Unique ValuesMySQL 对唯一值的约束
【发布时间】:2015-11-12 20:58:05
【问题描述】:

您将如何在 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 实例。

【问题讨论】:

  • 如果person_id 不是唯一的,则不能是primary key
  • 是的。更改示例以纠正该错误。
  • 如果我理解你,你可以有多个具有相同 person_id 的记录,那么该列代表什么?

标签: mysql sql database constraints unique


【解决方案1】:

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

使用我的小提琴,您可以查看是否取消注释我的最后一个查询,这将导致 mysql 出现重复值错误。

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

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

【讨论】:

  • 这个 SQL 小提琴网站非常适合测试东西!虽然这不是我想要的。每个 person_id 不能有重复的 person_phone_extension,但不同的 person_id 可以有相同的 person_phone_extension。我将编辑我原来的问题,以便更清楚地说明这一点。
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 2010-11-23
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
相关资源
最近更新 更多