Skip to content
SQL 中的简单数据验证

SQL 中的简单数据验证

在 SQL(结构化查询语言)中,数据验证指的是用于确认数据准确性和可靠性的过程。因为数据库经常由多个用户或程序进行更新、删除、查询或迁移,所以保持数据的完整性是非常关键的。在接下来的内容里,我们会介绍如何在 SQL 中实施一些基本的验证规则来确保数据的质量。

validation

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 – 右键单击表并单击“修改表”进行更改。

validation

唯一约束

我们通常会在 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),即刻体验所有高级功能。