博客
关于我
Oracle笔记(十) 约束
阅读量:795 次
发布时间:2023-02-26

本文共 2944 字,大约阅读时间需要 9 分钟。

数据库约束是保障数据规范化的重要机制,在数据库设计中起着关键作用。本文将详细介绍Oracle数据库中常用的五种约束类型及其应用场景。

一、非空约束(NOT NULL)

非空约束用于确保数据库字段的值不会为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")

二、唯一约束(UNIQUE)

唯一约束防止字段中的数据重复。通常用于如电子邮件地址或身份证号码等不允许重复的字段。

例子:

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为null
INSERT INTO member(mid, name, email) VALUES(3, '王五', 'mchina_tang@qq.com'); -- 错误,会抛出ORA-00001错误

错误提示:

ORA-00001: 违反唯一约束条件 (SCOTT.UK_EMAIL)

三、主键约束(PRIMARY KEY)

主键约束是非空约束和唯一约束的结合,确保字段不仅不为空且不重复。通常用于记录表的主记录标识,如员工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)

四、检查约束(CHECK)

检查约束用于对字段的取值范围进行验证,确保数据符合预定规则。

例子:

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)

五、外键约束(FOREIGN KEY)

外键约束用于建立表与表之间的关系,确保子表中的数据与父表中的数据相关联。

例子:

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/

你可能感兴趣的文章