本文共 2944 字,大约阅读时间需要 9 分钟。
数据库约束是保障数据规范化的重要机制,在数据库设计中起着关键作用。本文将详细介绍Oracle数据库中常用的五种约束类型及其应用场景。
非空约束用于确保数据库字段的值不会为NULL。这种约束适用于那些字段的值必须始终存在的场景。
CREATE TABLE member( mid NUMBER, name VARCHAR2(50) NOT NULL);
INSERT INTO member(mid, name) VALUES(1, '张三'); -- 正确INSERT INTO member(mid, name) VALUES(null, '李四'); -- 错误,会抛出ORA-01400错误INSERT INTO member(name) VALUES('王五'); -- 错误,会抛出ORA-01400错误 ORA-01400: 无法将 NULL 插入 ("SCOTT"."MEMBER"."NAME") 唯一约束防止字段中的数据重复。通常用于如电子邮件地址或身份证号码等不允许重复的字段。
CREATE TABLE member( mid NUMBER, name VARCHAR2(50) NOT NULL, email VARCHAR2(50) UNIQUE);
INSERT INTO member(mid, name, email) VALUES(1, '张三', 'mchina_tang@qq.com'); -- 正确INSERT INTO member(mid, name, email) VALUES(2, '李四', null); -- 正确,但email为nullINSERT INTO member(mid, name, email) VALUES(3, '王五', 'mchina_tang@qq.com'); -- 错误,会抛出ORA-00001错误
ORA-00001: 违反唯一约束条件 (SCOTT.UK_EMAIL)
主键约束是非空约束和唯一约束的结合,确保字段不仅不为空且不重复。通常用于记录表的主记录标识,如员工ID。
CREATE TABLE member( mid NUMBER PRIMARY KEY, name VARCHAR2(50) NOT NULL);
INSERT INTO member(mid, name) VALUES(1, '张三'); -- 正确INSERT INTO member(mid, name) VALUES(null, '张三'); -- 错误,会抛出ORA-01400错误INSERT INTO member(mid, name) VALUES(1, '李四'); -- 错误,会抛出ORA-00001错误
ORA-01400: 无法将 NULL 插入 ("SCOTT"."MEMBER"."MID")ORA-00001: 违反唯一约束条件 (SCOTT.PK_MID) 检查约束用于对字段的取值范围进行验证,确保数据符合预定规则。
CREATE TABLE member( mid NUMBER, name VARCHAR2(50) NOT NULL, sex VARCHAR2(10) NOT NULL, age NUMBER(3), CONSTRAINT pk_mid PRIMARY KEY(mid), CONSTRAINT ck_sex CHECK(sex IN ('男', '女')), CONSTRAINT ck_age CHECK(age BETWEEN 0 AND 200)); INSERT INTO member(mid, name, sex, age) VALUES(1, '张三', '男', 26); -- 正确INSERT INTO member(mid, name, sex, age) VALUES(2, '李四', '非', 26); -- 错误,会抛出ORA-02290错误INSERT INTO member(mid, name, sex, age) VALUES(2, '李四', '女', 260); -- 错误,会抛出ORA-02290错误
ORA-02290: 违反检查约束条件 (SCOTT.CK_SEX)ORA-02290: 违反检查约束条件 (SCOTT.CK_AGE)
外键约束用于建立表与表之间的关系,确保子表中的数据与父表中的数据相关联。
CREATE TABLE member( mid NUMBER PRIMARY KEY, name VARCHAR2(50) NOT NULL);CREATE TABLE book( bid NUMBER PRIMARY KEY, title VARCHAR2(50) NOT NULL, mid NUMBER, CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid));
INSERT INTO member(mid, name) VALUES(1, '张三'); -- 正确INSERT INTO book(bid, title, mid) VALUES(101, 'Java开发', 1); -- 正确INSERT INTO book(bid, title, mid) VALUES(102, 'Java Web开发', 2); -- 正确
ORA-02291: 违反完整约束条件 (SCOTT.FK_MID) - 未找到父项关键字
约束可以通过ALTER TABLE命令进行添加或删除。例如:
ALTER TABLE member ADD CONSTRAINT pk_mid PRIMARY KEY(mid); -- 添加主键约束ALTER TABLE member DROP CONSTRAINT pk_mid; -- 删除主键约束
要查询数据库中的约束信息,可以使用以下SQL语句:
SELECT owner, constraint_name, table_name, column_name FROM user_constraints;SELECT owner, constraint_name, table_name FROM user_constraints;
通过这些命令,可以清晰地查看数据库中定义的所有约束及其相关信息,有助于进行数据库维护和优化。
转载地址:http://irpfk.baihongyu.com/