Sql 检查约束失败
我正在使用sqlite3 我已经创建了这样一个类的表Sql 检查约束失败,sql,sqlite,sql-like,glob,Sql,Sqlite,Sql Like,Glob,我正在使用sqlite3 我已经创建了这样一个类的表 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) ); 当我在这个表中插入一些值时 INSERT INTO Class VALUES ('CT2D'
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)
);
当我在这个表中插入一些值时
INSERT INTO Class
VALUES ('CT2D', 50);
它向我显示一条错误消息
“检查约束失败”
我已经根据检查中的条件写入了值。有人能帮我解决这个问题吗。你没有在那里写
或条件或ClassID像'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);
您没有在那里写入或条件或ClassID像'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)
);
检查约束中的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()
。如上所述
sqlite使用GLOB()
。如上所述
sqlitesqlite不支持类似于
语法的语法。@TimBiegeleisen该问题使用SQL Server标记。您可以看到修订版。问题开始于我正在使用sqlite3
。。。我假设是这样的,除非OP甚至不知道自己的数据库。@Huy Vũ:正如你所看到的,最初标记几个不相关的DBM,你让Sami付出了徒劳的努力。今后请不要使用模拟标记标记您的请求。SQLite不支持类似于
语法的。@TimBiegeleisen该问题已使用SQL Server标记标记。您可以看到修订版。问题开始于我正在使用sqlite3
。。。我假设是这样的,除非OP甚至不知道自己的数据库。@Huy Vũ:正如你所看到的,最初标记几个不相关的DBM,你让Sami付出了徒劳的努力。今后请避免使用模拟标记标记您的请求。您使用的是SQLite还是SQL Server?请编辑您的问题和标记您使用的是SQLite还是SQL Server?请编辑您的问题和标记H是的,我知道了!我已经习惯了SQL Server,我认为它是sqlite3支持的,但我错了!非常感谢@Huy Vũ:如果REGEXP
不可用,您可以恢复为纯字符串函数(classid-LIKE'CT%'和LENGTH(classid)=4,SUBSTR(classid,3,1)介于'A'和'Z'之间和…)或(classid-LIKE'AT%'和…)
)@HuyVũ那么您使用的是SQL Server而不是SQLite?我目前正在学习SQL Server@Sami,但我的项目需要SQLite@metal哦,是的,我明白了!我已经习惯了SQL Server,我认为它是sqlite3支持的,但我错了!非常感谢@Huy Vũ:如果REGEXP
不可用,您可以恢复为纯字符串函数(classid-LIKE'CT%'和LENGTH(classid)=4,SUBSTR(classid,3,1)介于'A'和'Z'之间和…)或(classid-LIKE'AT%'和…)
)@HuyVũ那么您使用的是SQL Server而不是SQLite?我目前正在学习SQL Server@Sami,但我的项目需要SQLite@metal哇,我甚至都不知道GLOB
接线员。这是SQLite中检查约束的完美解决方案。哇,我甚至不知道GLOB
操作符。这是SQLite中检查约束的完美解决方案。