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
我正在使用 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