本文共 1232 字,大约阅读时间需要 4 分钟。
在数据库表结构设计中,约束是用来确保数据的完整性和一致性的。约束可以在列级(字段级)或表级(表级)设置,具体使用场景和需求决定。
在 Oracle SQL 中,列级约束的语法如下:
CREATE TABLE table_name ( column_name datatype CHECK(expressions), ...);
以下是一个实例,展示了如何在创建表时为特定列设置列级约束:
CREATE TABLE userinfo_c ( id varchar2(10) primary key, username varchar2(20), salary number(5,0) check (salary > 0));
在这个示例中,salary 列设置了一个列级检查约束,确保其值必须大于0。
当尝试插入数据时,Oracle 会自动验证列级约束。如果数据不符合约束条件,会抛出以下错误:
ORA-02290:违反检查约束条件 (SYSTEM.SYS_C0011119)
表级约束可以通过在 CREATE TABLE 语句中添加约束名称来实现。这种方法适用于需要对多个列进行统一约束检查的情况。
表级约束的语法如下:
CREATE TABLE table_name ( column_name datatype [check | constraint_name], ...);
以下是一个实例,展示了如何在表级设置约束:
CREATE TABLE userinfo_c1 ( id varchar2(10) primary key, username varchar2(20), salary number(5,0) check (salary > 0), constraint ck_salary check (salary > 0));
在这个示例中,salary 列有一个表级检查约束 ck_salary,确保其值必须大于0。
约束优先级:表级约束会覆盖列级约束。如果在表级设置约束和列级设置约束同时存在,表级约束优先生效。
检查约束的执行顺序:在插入数据时,约束会按定义顺序执行。如果某个约束依赖于其他约束的结果,需要确保约束的定义顺序正确。
避免约束冲突:在设计表结构时,确保所有约束之间没有冲突。例如,不同约束之间不应互相矛盾或依赖。
以下是一个常见的错误场景:
INSERT INTO userinfo_c (1, 'aaa', -50);
执行上述插入语句时,会抛出以下错误:
ORA-02290: 违反检查约束条件 (SYSTEM.SYS_C0011119)
这是因为 salary 列的检查约束要求值必须大于0。
转载地址:http://mnhj.baihongyu.com/