约束定义及相关用法

约束

约束是表级的强制规定

约束放置在表中删除有关联关系的数据

有以下五种约束:

NOT NULL 非空

UNIQUE 唯一

PRIMARY KEY 主键(非空且唯一)

FOREIGN KEY 外键(依赖于主键)

CHECK 检查

CREATE TABLE EMPLOYEES(

    EMPLOYEE_ID NUMBER(6),

    LAST_NAME VARCHAR2(25) NOT NULL,

    SALARY NUMBER(8,2),

    COMMISSION_PCT NUMBER(2,2),

    HIRE_DATE DATE

                CONSTRAINT EMP_HIRE_DATE_NN

                NOT NULL);

CREATE TABLE T6

(

X NUMBER UNIQUE,--列级约束

Y NUMBER,

Z NUMBER,

CONSTRAINT CON_Y UNIQUE(Y));--表级约束

创建一个表T7

列名分别是a,b,c,d,e,f

类型分别是number,varchar(2),date,number,number,number

其中a 非空(列级约束),b列唯一(表级约束),c列默认值是当前系统时间

向表中插入2行记录,

1,’hehe’,default,2,3,4

2,’haha’,default,5,6,7

修改表,将第一行的4改成8

CREATE TABLE T7

(

a NUMBER NOT NULL,

b VARCHAR2(10),

c DATE DEFAULT SYSDATE,

d NUMBER,

e NUMBER,

f NUMBER,

CONSTRAINT b_col UNIQUE(b));

INSERT INTO T7 VALUES(1,'hehe',DEFAULT,2,3,4);

INSERT INTO T7 VALUES(2,'haha',DEFAULT,5,6,7);

UPDATE T7 SET f=8

WHERE f=4;

列级主键约束

CREATE TABLE T8 (

X NUMBER PRIMARY KEY,

Y NUMBER,

Z NUMBER);

表级主键约束

CREATE TABLE T9(

X NUMBER,

Y NUMBER,

Z NUMBER,

CONSTRAINT x_col PRIMARY KEY(X));

联合主键约束

CREATE TABLE T15

(

ID NUMBER(18),

PHONE_NUMBER NUMBER(11),

CONSTRAINT PK_001 PRIMARY KEY(ID,PHONE_NUMBER)

);

INSERT INTO T15 VALUES(110121,13500001111);

INSERT INTO T15 VALUES(110121,13500001110);

CREATE TABLE DEPT_I AS SELECT * FROM DEPT WHERE 1=2;要DEPT表的结构,不要它的数据

FOREIGN KEY 外键和主键的约束关系

wps3955.tmp

CONSTRAINT 约束名称 FOREIGN KEY(外键所在的本表/子表的列)REFERENCES 父表(主键列)

FOREIGN KEY约束的关键字

ON DELETE CASCADE:当父表中的列被删除时,子表中相对应的列也被删除

ON DELETE SET NULL:当父表中的列被删除时,子表中相对应的列置空

CREATE TABLE DEPT_I AS SELECT * FROM DEPT;

CREATE TABLE EMP_I AS SELECT * FROM EMP;

ALTER TABLE DEPT_I ADD CONSTRAINT PK1 PRIMARY KEY(DEPTNO);

ALTER TABLE EMP_I ADD CONSTRAINT FK1 FOREIGN KEY(DEPTNO) REFERENCES DEPT_I(DEPTNO);

DELETE DEPT_I WHERE DEPTNO=10;这样删,显示违反约束条件

设置为允许级联删除

CREATE TABLE DEPT_II AS SELECT * FROM DEPT;

CREATE TABLE EMP_II AS SELECT * FROM EMP;

ALTER TABLE DEPT_II ADD CONSTRAINT PK2 PRIMARY KEY (DEPTNO);

ALTER TABLE EMP_II ADD CONSTRAINT FK2 FOREIGN KEY (DEPTNO) REFERENCES DEPT_II(DEPTNO) ON DELETE CASCADE;

DELETE DEPT_II WHERE DEPTNO=10;

wps3956.tmpwps3967.tmp

将父表被删除的值在子表列值置空

CREATE TABLE DEPT_III AS SELECT * FROM DEPT;

CREATE TABLE EMP_III AS SELECT * FROM EMP;

ALTER TABLE DEPT_III ADD CONSTRAINT PK2 PRIMARY KEY (DEPTNO);

ALTER TABLE EMP_III ADD CONSTRAINT FK2 FOREIGN KEY (DEPTNO) REFERENCES DEPT_III(DEPTNO) ON DELETE SET NULL;

DELETE DEPT_III WHERE DEPTNO=10;

wps3968.tmp

wps3969.tmp

CHECK约束 定义每一行必须满足的条件

CREATE TABLE T12

(

X NUMBER,

Y NUMBER CONSTRAINT C_O1 CHECK(Y>100)

);

INSERT INTO T12 VALUES(1,1);

会报错

wps396A.tmp

wps396B.tmp

所有的DDL,都不需要对表进行提交

查看约束

SELECT CONSTRAINT_NAME,COLUMN_NAME

FROM USER_CONS_COLUMNS

WHERE TABLE_NAME='EMP_I'

禁用约束

ALTER TABLE EMP_I

DISABLE CONSTRAINT FK1 CASCADE;

启用约束

ALTER TABLE EMP_I

ENABLE CONSTRAINT FK1;

如果主键和外键在同一个表里,那子表里面的列的值必须要在父表里面存在才行

删除主键约束级联删除外键约束

ALTER TABLE T30 DROP CONSTRAINT PK1 CASCADE;

修改列的属性

ALTER TABLE T30 MODIFY(K DATE DEFAULT SYSDATE);

ALTER TABLE EMP2

DROP COLUMN EMPLOYEE_ID;--删除列

ALTER TABLE EMP2

DROP COLUMN EMPLOYEE_ID CASCADE CONSTRAINT;--同时删除约束

ALTER TABLE EMP2

DROP (EMPLOYEE_ID) CASCADE CONSTRAINT

ALTER TABLE EMP2

DROP (EMPLOYEE_ID,DEPARTMENT_ID,JOB_ID) CASCADE CONSTRAINT

重命名列

ALTER TABLE T22 RENAME COLUMN Z TO ID;

重命名约束

ALTER TABLE T22 RENAME CONSTRAINT SYS_C0011412 TO PK2222;

CREATE TABLE T22 (X NUMBER PRIMARY KEY,Y NUMBER,Z NUMBER,CHECK(Y>50),CHECK(Z>50));

SELECT CONSTRAINT_NAME,COLUMN_NAME

FROM USER_CONS_COLUMNS

WHERE TABLE_NAME='T22';

ALTER TABLE T22 DROP (X,Y) CASCADE CONSTRAINT;

ALTER TABLE T22 RENAME COLUMN Z TO PKZ;

ALTER TABLE T22 RENAME CONSTRAINT SYS_C0011412 TO PK2222;

CREATE TABLE T25

(

    C1 NUMBER,

    C2 NUMBER,

    C3 NUMBER CONSTRAINT CON_3 NOT NULL,

    C4 NUMBER,

    C5 NUMBER CONSTRAINT CON_5 CHECK(C5>900),

    C6 NUMBER CONSTRAINT CON_6 UNIQUE,

    CONSTRAINT CON_1 PRIMARY KEY(C1,C2),

    CONSTRAINT CON_4 FOREIGN KEY(C4,C5) REFERENCES T25(C1,C2)

    );

ALTER TABLE T25 ADD C7 NUMBER;

ALTER TABLE T25 ADD C7 NUMBER;

desc t25;

ALTER TABLE T25 DROP COLUMN C3 CASCADE CONSTRAINT;删除列同时删除约束

ALTER TABLE T25 DISABLE CONSTRAINT CON_1 CASCADE;----启用约束

ALTER TABLE T25 ENABLE CONSTRAINT CON_1 CASCADE;----禁用约束

ALTER TABLE T25 DROP CONSTRAINT CON_6;----删除约束

猜你喜欢

转载自www.cnblogs.com/kawashibara/p/9038213.html
今日推荐