取值范围
Luwak中,取值范围的验证是通过CHECK约束实现的。CHECK是SQL92规范里的功能。MySQL 8.0.16 支持了CHECK。
CHECK 约束用于限制表中数据的有效性,确保数据符合指定条件或规则。通过使用 CHECK约束,可以在数据库级别强制实施数据完整性和业务规则,以确保数据库中的数据符合规定的条件和要求。这有助于维护数据质量和安全性,减少错误数据的插入,并加强数据库的可靠性。
应用场景
-
数据范围限制
确保数值字段的值在特定范围内,如要求销售价格必须大于零,或者年龄必须在一定范围内。
-
日期范围限制
限制日期字段的有效性,如确保生日在有效日期范围内,或确保合同起始和结束日期的逻辑正确性。
-
枚举值
限制字段的值只能是预定义的枚举值之一,如性别只能是 "男" 或 "女",或状态只能是 "激活"、"暂停" 或 "注销"。
-
复杂条件
执行复杂的逻辑条件,例如确保订单的交付日期在订单创建日期之后,或确保手机号码符合特定格式。
-
数据完整性
用于确保数据的完整性,如确保在订单表中存在有效的客户ID,或确保员工表中的主管ID引用有效的员工。
-
业务规则
实施与特定业务需求相关的规则,如确保退货的数量不大于库存数量,或确保新闻文章的发布日期在当前日期之前。
-
安全性约束
用于安全目的,以确保只有授权用户能够访问特定数据。例如,只允许特定用户类型(例如管理员)访问某些敏感数据。
-
用户权限控制
在多用户环境中,可以使用 CHECK 约束来限制用户对特定数据的访问权限,以确保用户只能访问其被授权的数据。
示例
现有员工数据表,salary字段记录员工工资,该字段需要校验值必须大于1000
CREATE TABLE employees (
emp_no INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE,
salary DECIMAL(10, 2),
CHECK (salary > 1000)
);
现在新增一条数据,salary小于1000
luwak请求报文
JSON-RPC请求报文
{
"jsonrpc":"2.0",
"method":"hrm.employees.add",
"params": [
{
"empNo": 10008,
"birthDate": "1964-06-02",
"firstName": "Thomas",
"lastName": "Simmel",
"gender":"F",
"hireDate":"1985-11-21",
"salary":999
}
],
"id":"client-unique-request-id"
}
响应报文
{
"jsonrpc": "2.0",
"error": {
"code": 10000,
"message": "error create: salary: 999 does not validate as numeric",
"data": "EU.Z.Query"
},
"id": "client-unique-request-id"
}
Luwak给出错误信息salary校验不通过,拒绝写入数据库。