SQL 中的简单数据验证
在 SQL(结构化查询语言)中,数据验证指的是用于确认数据准确性和可靠性的过程。因为数据库经常由多个用户或程序进行更新、删除、查询或迁移,所以保持数据的完整性是非常关键的。在接下来的内容里,我们会介绍如何在 SQL 中实施一些基本的验证规则来确保数据的质量。
SQL 中的数据验证是什么?
数据验证是一种确保数据准确性和可靠性的手段,通常在录入、修改或处理数据前进行。当需要整合来自多个源的数据时,我们通常会提到“数据清洗”,实际上就是指的数据验证过程。在这个过程中,我们可以确认数据:
- 是否齐全(也就是说,没有缺失或空缺的信息)
- 是否具有唯一性(也就是说,没有重复的数据项)
- 是否符合预期的标准或模式(比如数值是否在一个特定的区间内)
应用这些检查的一些例子如下:
- 对于工资表,“工资”字段可以设定一个最低和最高限额,以此来保证录入的工资数额处于合理的区间内。
- 在客户信息表中,当记录地址详情时,可以设定规则确保邮政编码只包含数字并且其长度符合标准格式。
- 在产品信息表中,可以对“颜色”这一栏位设定枚举类型约束,使其只能接受预定义的颜色选项。
有些人可能会认为“这种类型的数据验证应该在应用层面上实现,而不是在数据库层面。”虽然应用层面的验证非常重要,但是考虑到直接在数据库层面执行更新的情况,确保数据库本身也有适当的数据验证机制也是很重要的,即便应用层也进行了验证。
虽然听起来显而易见,但值得注意的是,尽管我们可以通过规则来验证数据输入,但这并不能完全保证值的真实正确性。例如,我们可以设置一条规则,使得工资字段中的所有条目必须在5000到250,000之间。然而,这条规则不能阻止不正确的条目,只要它们落入了这个允许的区间内。
在验证过程中,我们可以应用更复杂的约束。比如,可以使用外键约束来确保两个表之间的关系不会被破坏;如果未提供数据,则可以设置默认值;还可以通过主键约束来唯一标识表中的每一行。
我们将具体探讨三种最常用的用于数据验证的约束:NOT NULL(非空)、UNIQUE(唯一)和CHECK(检查)。这些约束帮助我们在数据库级别上维护数据的一致性和准确性。
SQL 中的约束
在 SQL Server 中,约束是用来限制可以插入表中的数据的规则。这些规则有助于保证数据的有效性,并支持数据库的整体完整性。约束既可以在创建表的同时定义,也可以在表创建之后添加,并且可以适用于单一列或多列。
当尝试在符合约束条件的列中插入数据时,SQL Server 将允许该操作并成功插入数据。相反,如果插入的数据违反了任何约束,那么插入操作将会失败,并且系统会返回一个错误信息。
非空约束
SQL Server 支持 NULL 值,这表示“未知”或“无值”的状态。NULL 值有其适用的场景,但在某些情况下,我们不允许某一列存在 NULL 值。这时,我们可以在该列上应用 NOT NULL 约束。
让我们用一个不同的例子来说明这一点:假设我们要创建一个顾客信息表,并指定除了**“昵称”**字段外,所有其他字段都不能为空值。
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
Nickname NVARCHAR(50),
Email NVARCHAR(100) NOT NULL,
PhoneNumber NVARCHAR(15) NOT NULL
);
如果我们需要将现有列更新为 NOT NULL,那么我们可以使用 ALTER TABLE 语句。或者,我们可以使用 Chat2DB – 右键单击表并单击“修改表”进行更改。
唯一约束
我们通常会在 ID 类型的列上使用 UNIQUE 约束。比如创建一个书籍表,并指定每本书的 ISBN 必须是唯一的且不能为空:
CREATE TABLE Books (
ISBN VARCHAR(13) NOT NULL UNIQUE,
Title NVARCHAR(100),
Author NVARCHAR(100),
PublicationYear INT
);
在这个例子中,ISBN
字段被设置为 UNIQUE 并且 NOT NULL,确保每本书都有一个唯一的国际标准书号,并且这个书号不可以为空。
检查约束
检查约束由逻辑表达式组成,用于确定哪些值有效。一个简单的例子是在工资数据库中,我们想要指定可以输入的最大值。创建表时 CHECK 约束的语法如下所示。
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
CONSTRAINT constraint_name
CHECK (column_name condition)
);
因此,我们可以创建一个员工薪资表,并对输入到 Salary
列中的值施加检查约束:
CREATE TABLE dbo.EmployeeSalaries (
EmployeeID int PRIMARY KEY,
EmployeeType int,
Salary decimal(9,2),
CONSTRAINT CK_EmployeeSalaries_SalaryRange
CHECK (EmployeeType = 1 AND Salary >= 0 AND Salary <= 200000.00)
);
如果我们需要对现有表中的列添加检查约束,可以使用 ALTER 语句:
ALTER TABLE dbo.EmployeeSalaries
ADD CONSTRAINT CK_EmployeeSalaries_SalaryRange
CHECK (EmployeeType = 1 AND Salary >= 0 AND Salary <= 200000.00);
要删除检查约束,我们可以使用以下命令:
ALTER TABLE dbo.EmployeeSalaries
DROP CONSTRAINT CK_EmployeeSalaries_SalaryRange;
最后,临时启用或禁用检查约束通常很有用,我们可以按如下方式执行此操作:
要启用检查约束:
ALTER TABLE dbo.EmployeeSalaries
WITH CHECK CHECK CONSTRAINT CK_EmployeeSalaries_SalaryRange;
要禁用检查约束:
ALTER TABLE dbo.EmployeeSalaries
NOcheck CONSTRAINT CK_EmployeeSalaries_SalaryRange;
正如你所看到的,检查约束很容易创建并且使用灵活。
概括
在 SQL 中执行数据验证对于保持数据库的完整性和一致性至关重要。使用 SQL Server Management Studio(SSMS),可以通过创建和管理约束来实现数据验证。这包括使用 NOT NULL 约束来防止空值插入,使用 UNIQUE 约束来确保某一列或组合列的唯一性,以及使用 CHECK 约束来限制列中的值范围或格式。通过这些方法,可以有效地在数据库级别上控制数据质量。
开始体验 Chat2DB Pro
如果你正在寻找一款强大、基于 AI 的数据库管理工具,快来试试 Chat2DB 吧!无论你是数据库管理员、开发者还是数据分析师,Chat2DB 都能通过 AI 的强大功能简化你的工作。
👉现在享受 Chat2DB Pro 30 天免费试用 (opens in a new tab),即刻体验所有高级功能。