CHECK约束失败

CHECK constraint failed

我正在使用 sqlite3

我创建了一个 table 的 class 像这样

CREATE TABLE Class (
    ClassID char(5) PRIMARY KEY CHECK (ClassID LIKE 'CT[1-9][A-Z]' OR 'AT[1-9][1-9][A-Z]'),
    ClassQuantity int NOT NULL CHECK (ClassQuantity > 0)
);

当我向其中插入一些值时 table

INSERT INTO Class
VALUES ('CT2D', 50);

它向我显示一条错误消息

'CHECK constraint failed'.

我在检查中写了根据条件的值。谁能帮我解决这个问题。

你没写 OR 条件 OR ClassID LIKE 'AT[1-9][1-9][A-Z]'

CREATE TABLE Class (
  ClassID char(5) PRIMARY KEY 
  CHECK (ClassID LIKE 'CT[1-9][A-Z]' OR ClassID LIKE 'AT[1-9][1-9][A-Z]'),
    ClassQuantity int NOT NULL CHECK (ClassQuantity > 0)
);

INSERT INTO Class
VALUES ('CT2D', 50);

检查约束中的 LIKE 表达式正在尝试使用 SQL Server 和 Sybase 等数据库支持的扩展语法。但是,我认为 SQLite 不支持这种语法。作为解决方法,如果您的 SQLite 版本有 REGEXP,我们可以改用它:

CREATE TABLE Class (
    ClassID char(5) PRIMARY KEY CHECK (ClassID REGEXP 'CT[1-9][A-Z]|AT[1-9][1-9][A-Z]'),
    ClassQuantity int NOT NULL CHECK (ClassQuantity > 0)
);

使用GLOB()。如前所述 here

CREATE TABLE Class (
  ClassID char(5) PRIMARY KEY 
  CHECK (ClassID GLOB 'CT[1-9][A-Z]' OR ClassID GLOB 'AT[1-9][1-9][A-Z]'),
    ClassQuantity int NOT NULL CHECK (ClassQuantity > 0)
);

INSERT INTO Class
VALUES ('CT2D', 50);

sqlite dbfiddle