PostgreSQL 约束验证
在 PostgreSQL 中,约束是用于确保数据完整性和一致性的规则。约束验证是确保这些规则在数据插入、更新或删除时得到遵守的过程。通过约束验证,您可以防止无效数据进入数据库,从而保持数据的准确性和可靠性。
什么是约束验证?
约束验证是 PostgreSQL 在数据操作(如插入、更新或删除)时自动执行的检查过程。它确保数据符合预定义的规则(即约束)。如果数据违反了这些规则,PostgreSQL 将拒绝操作并返回错误。
常见的约束类型包括:
- 主键约束(PRIMARY KEY):确保每行的唯一性。
- 外键约束(FOREIGN KEY):确保表之间的关系完整性。
- 唯一约束(UNIQUE):确保列中的值唯一。
- 检查约束(CHECK):确保列中的值满足特定条件。
- 非空约束(NOT NULL):确保列中的值不为空。
约束验证的工作原理
当您向表中插入或更新数据时,PostgreSQL 会自动验证数据是否符合所有定义的约束。如果数据违反了任何约束,操作将被中止,并返回错误信息。
示例:检查约束
假设我们有一个 employees
表,其中包含员工的工资信息。我们希望确保工资始终大于零。我们可以使用 CHECK
约束来实现这一点:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
salary NUMERIC CHECK (salary > 0)
);
在这个例子中,CHECK (salary > 0)
是一个检查约束,它确保 salary
列中的值始终大于零。
输入和输出
尝试插入一个无效的工资值:
INSERT INTO employees (name, salary) VALUES ('John Doe', -100);
PostgreSQL 将返回以下错误:
ERROR: new row for relation "employees" violates check constraint "employees_salary_check"
DETAIL: Failing row contains (1, John Doe, -100).