–约束的创建与管理
–非空约束
–name varchar2(20)notnull;
–唯一约束:数据列的内容不允许重复
–emaile varchat2(30)unique;
–空值不会收到唯一约束的限制 null
–在Oracle中,约束也是对象,使用数据字典查看
–select * from user_constraints;
–比较麻烦
–建立约束的时候给约束设置一个名字,格式:约束类型简写_字段 unique约束:uk_email;
constraint uk_email unique(email)–表示在email字段上设置了约束
–主键约束:唯一 + 非空:primary key
constraint pk_mid primarykey(mid);
–一般只在一张表设置一个主键,也可以设置多个:复合主键
constraint pk_mid_name primarykey(mid ,name);
–设置了复合主键,只有在两列的内容都相同是表示重复,但极少使用
–检查约束:在数据更新操作前设置一些过滤条件,只有满足条件
–才可以更新,使用check 简称ck
–例子,设置年龄时需要一个基本范围,性别只能是男或女
constraint ck_age check(age between 0 and 250);
–设置过多检查约束会影响性能,因此一般由程序进行检查
–在实际工作中较少使用
–查看约束对象,但这个数据字典只能告诉用户哪个表上有约束
–使用user_cons_columns表可以知道约束对象对应的列
col owner for A20;
col constraint_name for A20;
col table_name for A20;
col column_name for A20;
select* from user_cons_columns;
–外键约束foreign key 简称fk
–作用在两张数据表上的约束,使字表的数据受到父表的数据的约束
–模拟一个人有多本书的表
–限制1:在删除父表之前必须删除字表
–强制删除(比如A表有B表的外键,B表有A表的外键)
drop table memeber cascade constraint;–不到万不得已,不使用
–限制一:父表中的设为外键的关联字段,必须设置为主键约束或者
–唯一约束
–限制三:默认情况下,如果父表记录中有对应的子表记录,那么父表
–记录无法被删除,要想删除要先删子表记录
–数据的级联操作:
1级联删除,当父表记录删除,子表对应的数据也被删除
constraint fk_mid foreignkey(mid)preferences memeber(mid)
on delete cascade;
2级联更新,当父表记录删除,子表对应的内容设置为null
on delete set null
约束修改(在开发实践中,一般不修改约束)
1为表中增加约束:
alter table 表名称 add constraint 约束名称 约束类型(字段)
–此语法不能用在非空约束上,要想增加非空约束,只能修改表结构
alter table member modify(name varchar2(20) not null)
2删除约束
alter table 表名称 drop constraint 约束名称