Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检查约束失败_Sql_Sqlite_Sql Like_Glob - Fatal编程技术网

Sql 检查约束失败

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'

我正在使用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', 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()
。如上所述



sqlite

sqlite不支持类似于
语法的
语法。@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中检查约束的完美解决方案。