SQL创建CHECK约束(sql创建check约束字符)

去年夏天,我在一个旧图书馆查找资料时,偶然发现了一本泛黄的SQLServer2 000用户手册。
嘿嘿,那时候我还是个新手。
看着这些使用说明书,我暗自佩服,心想:“这真是一个简单的限制方法。
”后来我在一个项目中使用了这个方法,在表上设置两个检查约束花了不到五分钟。
以前我突然想:这张表到底有多少数据呢?等等,还有一个问题:这个项目进展如何?

sql 2000,要求限制电话号码十一位,只能是数字~数据类型char(12),约束表达式怎么写

说实话,SQL Server 2 000确实有一个PATINDEX函数,在老版本中广泛使用。
你可以使用2 005 版本进行测试,但是2 000的语法和功能是一样的,所以你可以放心。

有趣的是,您的代码中有一个小错误。
chk_test约束条件是倒着写的。
LEN 和 PATINDEX 的顺序应该颠倒。
现在这样写,只要长度不是1 1 位,或者有混合数字,就不会进表。

例如,您尝试“1 2 3 4 5 6 7 8 9 01 2 ”。
即使长度正确,也都是数字。
PATINDEX 返回 0,因此插入失败。
'1 2 3 4 5 6 7 8 9 0a' 成功,因为 PATINDEX 无法在字符串 '1 2 3 4 5 6 7 8 9 0a' 中找到非数字并返回 0。
此外,长度不正确,因此该行失败。

如果您想测试所有 1 1 位数字,可以尝试“1 2 3 4 5 6 7 8 9 01 ”。
按照目前的逻辑,长度是正确的,PATINDEX也返回0(因为都是数字),这一行应该成功。

Block运行在2 000年的环境中,但在我看来,PATINDEX的使用与现在相比并没有太大变化。
这就是限制。
逻辑必须颠倒过来。
当您现在测试此代码时,只有“1 2 3 4 5 6 7 8 9 01 ”可以成功,其他都不能成功。

我记得数据在X左右,但我建议你检查一下。
2 000年的环境现在已经不太常见了。
然而,PATINDEX 函数自 1 9 9 8 年以来就已存在,多年来没有发生太大变化。

check约束表达式怎么写

上周查看了数据库文档。
检查约束非常重要。

语法如下: sql ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(逻辑表达式);
约束名称必须是唯一的。
例如CK_Age就是这样命名的。

逻辑表达式返回布尔值。
使用字段、运算符和常量。

示例: 1 、条件简单 sql ALTER TABLE 员工添加约束 CK_Age CHECK(age >= 0); 年龄不能为负数。

2 多值限制 sql ALTER TABLE 用户添加约束 CK_Gender CHECK(gender IN ('male', 'female')); 性别只能是男性或女性。

3 复杂的逻辑 sql ALTER TABLE 产品添加约束 CK_Discount CHECK(折扣 >= 0 AND 折扣 <= 1 ); 折扣在0到1 之间。

注意事项: 1 、性能优化 避免复杂的表达。
嵌套函数会变慢。

2 数据类型匹配 字段类型必须与常量一致。
sql -
错误 检查(年龄 > '1 8 ')
-
正确 检查(年龄 > 1 8 )
3 测试验证 插入非法数据看是否报错。
sql -
测试年龄限制 插入员工(年龄)值 (-5 );
4 其他限制 可以跨越领域限制。
sql ALTER TABLE 预订 CHECK(end_date > start_date);
注意数据库兼容性。
例如,MySQL 对 CHECK 的支持有限。

完整案例: sql -
创建表时添加约束 创建表学生( id INT 主键, 名称 VARCHAR(5 0) NOT NULL, INT CHECK 等级(0 到 1 00 之间的等级), 电子邮件 VARCHAR(1 00) CHECK(电子邮件 LIKE '%@%.%') );
-
稍后添加约束 ALTER TABLE 学生添加约束 CK_Name CHECK(LEN(name) >= 2 );
摘要: 检查约束是数据完整性工具。
编写时要注意性能、类型和测试。

算了。