oracle-约束

1.定义:
约束是强加在表上的规则或条件。

2.约束的功能:
实现一些业务规则,防止无效的垃圾数据进入数据库。
维护数据库的完整性(完整性指正确性与一致性),从而使数据库的开发和维护都更加容易。
3.约束的分类:
①not mull 非空约束
②unique 唯一约束
③primary key 主键
④foreign key 外键
⑤check 定义一般性约束
4.语法
增加:alter table 表名 add constraint 约束名 约束关键字(列名);
删除:alter table 表名 drop constraint 约束名;
约束失效:alter table 表名 disable constraint 约束名 cascade;
使用cascade选项可以同时使有依赖关系的选项失效。

约束生效:alter table 表名 enable constraint 约束名;
一个唯一索引,或者主键索引在激活唯一键或主键时自动产生。
5.注意:
定义约束时没有给出约束的名字,ORACLE系统将为该约束自动生成一个名字,其格式为SYS_Cn,其中n为自然数。(强烈建议加名字)

一。主键:

1.查询表的主键:(表名要大写,否则为空)

select cu.* from user_cons_columns cu, user_constraints au 
	where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' 
		and au.table_name = 'EMP';	

2.删除主键:

alter table emp drop constraint emp_no_pk;

3.加主键

alter table emp add constraint emp_no_pk primary key(empno);

二。外键:

1.查询外键:(表名必须大写,否则为空)

select constraint_name "外键名",  table_name "表名",R_constraint_name "参考约束名" 
	from user_constraints c 
		where c.constraint_type= 'R' and c.table_name='EMP2';

2.删除外键:

alter table emp2 drop constraint emp_dept_fk;

3.增加外键:

(父表的列必须是主键,否则会报异常ORA-02270: no matching unique or primary key for this column-list)
①alter table emp2 add constraints emp_dept_fk foreign key(DEPTNO) references dept2(DEPTNO);

②alter table emp2 add constraints emp_dept_fk foreign key(DEPTNO) references dept2(DEPTNO) on delete cascade;
注意:列名一定大写,否则操作的结果和你想的根本不一样。

补充on delete cascade:
①对于alter table emp2 add constraints emp_dept_fk foreign key(DEPTNO) references dept2(DEPTNO)语句,
如果删除父表(部门表dept)数据,根本删除不了(会报错,因为有子表的外键牵连)。
delete from dept where depto=40; 会报错。

②对于alter table emp2 add constraints emp_dept_fk foreign key(DEPTNO) references dept2(DEPTNO) on delete cascade语句,
如果删除父表(dept表)数据,不但会删除dept表的数据,还会删除子表关联的数据。
delete from dept where deptno=40; 会删除dept表中的部门为40的记录,也会删除emp表中与部门号为40相关的记录。

三。检查约束:

1.查询表有哪些约束:

select constraint_name "约束名",  table_name "表名",search_condition "约束条件"
	from user_constraints c 
		where c.constraint_type= 'C' and c.table_name='EMP2';

2.删除检查约束:

alter table emp2 drop constraint CK_EMP2_EMPNO;

3.增加检查约束:

①建表时加check约束:

create table tb_supplier
(
  supplier_id       number,
  supplier_name     varchar2(50),
  contact_name      varchar2(60),
  /*定义CHECK约束,该约束在字段supplier_id被插入或者更新时验证,当条件不满足时触发。*/
  CONSTRAINT check_tb_supplier_id CHECK (supplier_id BETWEEN 100 and 9999)
);

②已经有数据的情况下给表加check约束:

alter table emp2 add constraint ck_emp2_empno CHECK (EMPNO between 100 and 8000);

注意:必须保证表中数据符合即将添加的check条件,否则创建check约束失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值