如何指定表的字段只能从一组特定值中获取值?

时间:2017-03-16 20:35:36

标签: mysql sql database rdbms ddl

我不是那么进入数据库而且我有以下问题与字段可以拥有的值集相关。我正在使用 MySql

我有 DDL 表定义:

CREATE TABLE actors (
  id        BigInt(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  sample_id VarChar(128) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
  `role`    Char(2) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
  wiews     VarChar(16) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
  pid       VarChar(16) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
  `name`    VarChar(128) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
  address   VarChar(128) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
  country   Char(3) CHARACTER SET latin1 COLLATE latin1_swedish_ci, 
  PRIMARY KEY (
      id
  )
) ENGINE=InnoDB AUTO_INCREMENT=1 ROW_FORMAT=COMPACT DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE actors COMMENT = '';
ALTER TABLE actors ADD CONSTRAINT fk_actors_pgrfas FOREIGN KEY (sample_id)
  REFERENCES pgrfas (sample_id)
  ON DELETE NO ACTION 
  ON UPDATE NO ACTION;

我无法更改这些字段的类型,因为应用程序使用这些字段。

有人向我提供了一个规范,指出角色字段(必须是 Char(2))只能使用此集合中的值: IN( 'PR', '共', 'BR')

如何在之前的 DDL 声明中指明此字段只能包含这3个值中的一个?

2 个答案:

答案 0 :(得分:1)

您可以使用ENUM

  

ENUM是一个字符串对象,其值从列表中选择   在列中显式枚举的允许值   表创建时的规范

https://dev.mysql.com/doc/refman/5.7/en/enum.html

例如......

    CREATE TABLE your_table  (
      col1  VARCHAR(40),
      role ENUM('pr','co','br')
  );

答案 1 :(得分:1)

MySQL不提供检查约束。此外,您需要修改表格以使其成为枚举(否则这将是MySQL中针对少数值的最佳方法)。

但是,您可以使用外键引用来执行此操作。

create table Roles (
     RoleName char(2) primary key
);

insert into Roles (RoleName)
    values ('pr'), ('co'), ('br');

alter table actors add constraint fk_actors_roles
    foreign key (role) references Roles(RoleName);