例1 建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码。 CREATE TABLE dept
(deptno NUMBER,
dname VARCHAR(9) CONSTRAINT u1 UNIQUE,
loc VARCHAR(10),
CONSTRAINT pk_dept PRIMARY KEY (deptno));
其中CONSTRAINT U1 UNIQUE表示约束名为U1,该约束要求Dname列值唯一。
例2 建立学生登记表Student,要求学号在90000~99999之间,年龄<29,性别只能是“男”或“女”,姓名非空。 CREATE TABLE student
(sno NUMBER(5) CONSTRAINT c1 CHECK (sno BETWEEN 90000 AND 99999),
sname VARCHAR(20) CONSTRAINT c2 NOT NULL,
sage NUMBER(3) CONSTRAINT c3 CHECK (sage<29),
ssex VARCHAR(2) CONSTRAINT c4 CHECK(ssex IN('男','女')));
例3 建立职工表EMP,要求每个职工的应发工资不得超过3000元。应发工资实际上就是实发工资列Sal与扣除项Deduct之和。 CREATE TABLE emp
(eno NUMBER(4),
ename VARCHAR(10),
job VARCHAR(8),
sal NUMBER(7,2),
deduct NUMBER(7,2),
deptno NUMBER(2),
CONSTRAINT c1 CHECK (sal + deduct <= 3000));
在Oracle中,除列值非空、列值唯一、检查列值是否满足一个布尔表达式外,用户还可以通过触发器(Trigger)来实现其他完整性规则。所谓数据库触发器,就是一类靠事件驱动的特殊过程,一旦由某个用户定义,任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发器,在核心层进行集中的完整性控制。
定义数据库触发器的语句是CREATE TRIGGER。
例4 为教师表Teacher定义完整性规则“教授的工资不得低于1000元,如果低于1000元,自动改为1000元”。 CREATE TRIGGER update_sal
BEFORE INSERT OR UPDATE OF sal, pos
ON teacher
FOR EACH ROW
WHEN (:NEW.pos = '教授') /**//* 某教员晋升为教授 */
BEGIN
IF :NEW.sal < 1000
THEN
:NEW.sal := 1000;
END IF;
END;
综上所述,Oracle提供了CREATE TABLE语句CREATE TRIGGER语句定义完整性约束条件,其中用CREATE TABLE语句可以定义很复杂的完整性约束条件。完整性约束条件一旦定义好,Oracle会自动执行相应的完整性检查,对于违反完整性约束条件的操作或者拒绝执行或者执行事先定义的操作。
文章来源于领测软件测试网 https://www.ltesting.net/