SQL DDL编号范围

SQL DDL编号范围,sql,constraints,ddl,Sql,Constraints,Ddl,我试图编写一些DDL代码,要求输入一个数字范围,但在互联网上找不到任何内容。 到目前为止,我已经: create table Section ( c# numeric(10), se# numeric(10), emp# numeric(5), time numeric(5), constraint Section_PK primary key (c#, se#), constraint Section_FK_Course foreign key

我试图编写一些DDL代码,要求输入一个数字范围,但在互联网上找不到任何内容。 到目前为止,我已经:

create table Section (
    c# numeric(10),
    se# numeric(10),
    emp# numeric(5),
    time numeric(5),
    constraint Section_PK primary key (c#, se#),
    constraint Section_FK_Course foreign key (c#) references Course,
    constraint Section_FK_Employee foreign key (emp#) references Employee
)
我的障碍是,我需要“控制编号”是40到60之间的任意数字,默认为20,同时,如果c#在3000到4000之间,则控制编号必须小于40

我真的不知道该怎么做。这是一种“如果然后”的说法吗?我以前从未做过类似的事情,也不知道如何或从哪里开始查找。

您可以查看:

检查约束是SQL中的一种完整性约束,它 指定数据库中的每一行必须满足的要求 桌子约束必须是谓词。它可以指单个或多个 表的多个列。谓词的结果可以是 根据空值的存在,可以是TRUE、FALSE或UNKNOWN。如果 谓词的计算结果为UNKNOWN,则约束不为UNKNOWN 违反,可以在表中插入或更新该行。这是 与SELECT或UPDATE中WHERE子句中的谓词相反 声明

例如,在包含产品的表中,可以添加检查 产品价格和产品数量的限制 是一个非负值:

PRICE>=0

数量>=0

如果没有这些限制,就有可能出现负价格(−$30)或数量(−3项)

检查约束用于确保数据库中数据的有效性 数据库并提供数据完整性。如果它们在同一时间使用 数据库级别,使用该数据库的应用程序将无法 添加无效数据或修改有效数据,使数据无效, 即使应用程序本身接受无效数据

不同的rdbms产品以不同的方式实现检查约束(有些根本没有),因此请查看您的rdbms手册中有关检查约束的部分。

您可以查看:

检查约束是SQL中的一种完整性约束,它 指定数据库中的每一行必须满足的要求 桌子约束必须是谓词。它可以指单个或多个 表的多个列。谓词的结果可以是 根据空值的存在,可以是TRUE、FALSE或UNKNOWN。如果 谓词的计算结果为UNKNOWN,则约束不为UNKNOWN 违反,可以在表中插入或更新该行。这是 与SELECT或UPDATE中WHERE子句中的谓词相反 声明

例如,在包含产品的表中,可以添加检查 产品价格和产品数量的限制 是一个非负值:

PRICE>=0

数量>=0

如果没有这些限制,就有可能出现负价格(−$30)或数量(−3项)

检查约束用于确保数据库中数据的有效性 数据库并提供数据完整性。如果它们在同一时间使用 数据库级别,使用该数据库的应用程序将无法 添加无效数据或修改有效数据,使数据无效, 即使应用程序本身接受无效数据


不同的rdbms产品实现检查约束的方式不同(有些根本不一样),因此请查看您的rdbms手册中关于检查约束的内容。

我更倾向于推荐基于
触发器的方法,而不是
检查约束的方法。不能使用
检查约束
约束值介于40和60之间,然后使用
默认值
值20。他们会互相冲突。使用
触发器
,您可以执行所有这些检查并返回错误消息,这些消息将告诉用户插入失败的原因。


但是,您必须进行一些测试,以查看触发器的性能是否处于可接受的水平。

我更倾向于推荐基于
触发器
的方法,而不是
检查约束
。不能使用
检查约束
约束值介于40和60之间,然后使用
默认值
值20。他们会互相冲突。使用
触发器
,您可以执行所有这些检查并返回错误消息,这些消息将告诉用户插入失败的原因。


但是,您必须进行一些测试,以查看触发器的性能是否处于可接受的水平。

什么是“控制编号”及其用途?@Amit抱歉,我忘了将其添加到原始列表中。我有点困惑是否应该加进去。我想,它应该是一个
控制数字(4),
但这是我得到的所有信息。这句话正确吗?“我需要“控制数字”是40到60之间的任意数字,默认为20”?如果它必须在40到60之间,它怎么能默认为20?是的,我已经仔细检查了,他们希望它在40到60之间,但默认为20。我想这只是意味着如果它是空的,那么就用20作为占位符。我不知道这是什么逻辑。什么是“控制编号”及其用法?@Amit我很抱歉,我忘了将其添加到原始列表中。我有点困惑是否应该加进去。我想,它应该是一个
控制数字(4),
但这是我得到的所有信息。这句话正确吗?“我需要“控制数字”是40到60之间的任意数字,默认为20”?如果它必须在40到60之间,它怎么能默认为20?是的,我已经仔细检查了,他们希望它在40到60之间,但默认为20。我想这只是意味着如果它是空的,那么就用20作为占位符。我不知道这是什么样的逻辑,所以约束检查让我记忆犹新。因此,如果我理解正确,最初我会使用
control\u number numeric(5)默认值“20”