sql 中 check 约束用法_sql 中 check 约束限制数据范围详解

你好,说实话,SQL中的CHECK约束是用来检查数据的,不是用来乱搞的。
例如,年龄不能为负数,价格不能为零,对吧?
您可以在创建表时添加它,如下所示:
sql 创建表员工( ID INT 主键, 名称 VARCHAR(5 0), 年龄 INT 检查(年龄 >= 0 且年龄 <= 1 5 0) );
年龄必须大于 0 且小于 1 5 0,否则不起作用。
简单吧?
如果表创建完成后想添加约束,还可以添加:
sql 更改表员工 添加约束 CHK_Age_Range CHECK(年龄 >= 0 且年龄 <= 1 5 0);
此处为该限制指定了一个名称,称为 CHK_Age_Range,以便稍后您知道它的用途。

有许多不同的功能。
例如数值,例如价格:
sql 价格 DECIMAL(1 0,2 ) 检查(价格 > 0)
价格必须大于0。
至于性别,只需要固定几个值即可:
sql 性别 VARCHAR(1 0) CHECK(性别 IN('男'、'女'、'其他'))
你只能选择男性、女性或其他。
还必须检查用户名的长度:
sql 用户名 VARCHAR(5 0) CHECK (LENGTH(用户名) >= 3 )
该名称的长度必须至少为 3 个字符。
还可以一起管理多个字段,比如开始日期小于结束日期:
sql 检查(开始日期 <= 结束日期)
但使用时需要注意一些事项。
首先,给约束起一个名字,比如CHK_Age_Range,否则很难找到系统本身创建的混淆代码。
不要写太复杂的关系。
其他人可能无法理解它们并且可能会很慢。
当一起管理多个字段时,需要清楚地考虑数据更改的顺序。

MySQL要注意的是,输入CHECK是没有用的,默认不会执行。
像:
sql 检查(工资>奖金)
它在 MySQL 中根本不起作用。
您必须自己找到一种方法,例如使用触发器或将其重新添加到代码中。

不同的数据库是不同的。
PostgreSQL 和 SQL Server 实际上会强制执行 CHECK 约束。
MySQL 不在乎。
虽然支持语法,但是还需要额外做一些工作。

sql中check怎么用 CHECK约束验证数据的3个实例

上周我在读一本数据库书籍。

CHECK约束非常重要。

确保数据满足条件。

简单地说。

那就是插入数据的时候。
我们来看看吧。

只有通过测试的人才会被接受。

如果不符合条件则阻止。

举三个例子。

第一个。
年龄限制。

例如:员工年龄。
年龄必须在 1 8 岁至 6 5 岁之间。

创建表时。
只需写出约束条件即可。

sql 创建表员工( 员工 ID INT 主键, 名称 VARCHAR(5 0), 族 VARCHAR(5 0), INT 测试年龄(年龄 >= 1 8 岁且年龄 <= 6 5 ) );
插入1 6 岁。
将会失败。

错误:违反 CHECK 约束。

第二。
产品类别有限。

例如:产品表。

类别只能是“电子产品”、“服装”或“家居用品”。

创建表时。
同时施加约束。

sql 创建表产品( ProductID INT 主键, 产品名称VARCHAR(1 00), 类别 VARCHAR(5 0) CHECK(类别(“电子产品”、“衣服”、“家用电器”)) );
插入“计算机”。
将会失败。

错误:违反 CHECK 约束。

第三个。
交货日期不能早于订单日期。

订单表。

发货日期 >= 订单日期。

创建表时。
写出约束条件。

sql 创建表订单( 订单 ID INT 主键, 订单日期DATE, 检查发货日期(交货日期 >= 订单日期) );
插入早于订单日期的交货日期。
将会失败。

错误:违反 CHECK 约束。

活动摘要。

创建表时。
使用 CHECK(条件表达式)。

修改表时。
使用 ALTER TABLE 添加约束。

sql ALTER TABLE 员工添加约束 CK_EmployeeAge CHECK(年龄 >= 1 8 AND 年龄 <= 6 5 );
禁用约束。
使用NOCHECK。

启用约束。
使用检查。

消除限制。
使用放置约束。

适用情况。
简单的行级身份验证。

例如检查范围和限制枚举值。

优点是性能好。
比触发器简单。

直接集成表结构。
不需要额外的代码。

但局限性相当大。

不支持复杂逻辑。
例如,跨表验证。

这需要一个触发器。

复杂的表达式可能会影响性能。

需要优化条件或添加索引。

一般来说。

CHECK约束非常实用。

可以保证数据的完整性。

减少无效数据。

但要在正确的地方使用它。

不能太复杂。

好的。
就是这样。

check约束表达式怎么写

记得有一次,周末下午我帮朋友整理了一个数据库。
他是一家初创公司的IT总监。
由于业务扩展,数据量大幅增加,数据库变得复杂。
我帮他设置了一些CHECK约束,保证数据的准确性。

当时我创建了一个新的员工表,其中包含年龄和薪水字段。
我设置了一个简单的CHECK约束,保证员工年龄不低于1 8 岁,薪资在3 000到1 0万之间。
我还记得导入约束的SQL语句,ALTERTABLE Employee ADDCONSTRAINT CK_Age CHECK(age >= 1 8 );员工可以更改 ADDCONSTRAINT CK_Salary CHECK(工资在 3 000 到 1 00000 之间);。

设置这些约束后,我尝试插入一条年龄为1 7 岁的记录,但数据库报错,说违反了CHECK约束。
我检查了一下,发现限制已经生效。
那一刻我感到很欣慰,因为我知道这些限制正在有效地保护数据。

等等,我突然想到,如果有一天这家公司发展壮大,数据量变大,CHECK约束的性能可能会受到影响。
需要提醒小伙伴们在设置约束时要考虑性能优化,避免使用过于复杂的表达式。