DDL-Oracle中的5种约束总结(未完待续)
--Oracle中系统的完整性约束包括主键、外键、unique(主键、外键、unique统称为键约束)、not null、check、index一共5种类型
--主键
--在创建表dept时声明主键deptno,同时将主键命名为pk_deptno,同时声明主键索引建立在索引表空间indx中
create table dept
(depno number(2)
,dname varchar2(20)
,constraint pk_deptno primary key(depno)
using index tablespace indx);
/*Oracle会自动为主键创建索引,Oracle强烈建议,任何应用程序至少需要创建两个表空间,
一个用于存储表数据,一个用于存储索引数据*/
--使用alter table语句定义主键
alter table dept drop constraint pk_deptno;
alter table dept add constraint pk_deptno primary key(depno);
--使用alter table语句修改主键状态
alter table dept disable constant pk_deptno;
alter table dept enable constant pk_deptno;--or
alter table dept enable primary key;
--使用alter table语句删除主键
alter table drop constraint pk_deptno;--or
alter table drop primary key;
--外键
--在创建表emp是定义外键deptno,该外键引用dept表中的主键deptno,并且指定主键删除时,外键所对应的列也删除
create table emp
(empno number(4) constraint pk_empno primary key --另一种设置主键的方式
,ename varchar2(10)
,sex char(2)
,job varchar2(10)
,deptno number(2)
,constraint fk_deptno foreign key(deptno)
references dept(deptno) on delete cascade);
--使用alter table语句定义外键
alter table emp add constant fk_deptno foreign key(deptno)
references dept(deptno) on delete cascade;
--使用alter table语句修改外键状态
alter table emp disable constraint fk_deptno;
--使用alter table语句删除外键
alter table emp drop constant fk_deptno;
--unique唯一性约束
create tabale
--not null约束,not null约束引用在单一列上,表示该列不能为空(not null一般是列级别的约束)
create table emp
(empno number(4)
,ename varchar2(10) not null
,sex char(2) check (sex='男' or sex='女')
,job varchar2(10)
,deptno number(2)
,constraint pk_empno primary key(empno)
,constraint fk_deptno foreign key(deptno)
references dept(deptno) on delete cascade);
--使用alter table语句,not null在表创建后指定,其语法和一般的约束语法不同
alter table emp modify ename not null;
--check约束,比如工资不能为负,性别应该只有男和女
--check约束可以用来定义某个列级别上的约束,但也可以为某一个表增加约束,即如果check约束保护多列则必须使用表约束语法
create table emp
(empno number(4) constraint pk_empno primary key --另一种设置主键的方式
,ename varchar2(10)
,sex char(2) check (sex='男' or sex='女')
,job varchar2(10)
,deptno number(2)
,constraint fk_deptno foreign key(deptno)
references dept(deptno) on delete cascade);