SQL约束问题

时间:2017-11-17 02:36:58

标签: mysql sql check-constraints

对SQL来说真的很新。我有一些问题想出一个约束'

这就是我想做的事。我有一个包含2列CampusIDLocation的表格。我想要一个约束,CampusID的每个元素必须是' UMS'后跟两位数字。不知道如何编码。这就是我所做的。我正在使用SQL Fiddle来做到这一点。

CREATE TABLE IF NOT EXISTS Campuses(
    CampusID varchar(16) Primary Key,
    Location varchar(16) NOT NULL,
    CONSTRAINT CampusID Check CampusID LIKE (UMS[0-9]0-9]),
);

INSERT INTO Campuses VALUES 
    (“UMS01”,“Augusta”), 
    (“UMS02”,“Farmington”),
    (“UMS03”,“Fort Kent”),
    (“UMS04”,“Machais”),
    (“UMS05”,“Orono”),
    (“UMS06”,“Presque Isle”),
    (“UMS07”,“Southern Maine”);

1 个答案:

答案 0 :(得分:1)

MySQL实际上并没有实现检查约束。它确实在语法上接受它们,但它忽略了它们。

几乎所有其他数据库都支持它们。对于您的表,语法如下:

CREATE TABLE Campuses (
    CampusID varchar(16) Primary Key,
    Location varchar(16) NOT NULL,
    CONSTRAINT CampusID Check (CampusID LIKE 'UMS__')
);

注意:这是UMS之后的两个字符。两位数字取决于数据库。对于Postgres,您可以使用(CampusID REGEXP '^UMS[0-9][0-9]$')

Here是使用Postgres的SQL小提琴。

注意:

  • 通常,主键是自动递增的(在Postgres中称为serial)。
  • 约束名称不应只是列的名称。我称之为“chk_campuses_campusId”。
  • LIKE模式需要用单引号括起来。
  • 整个check约束表达式需要括在括号中。