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;

1

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);

1

注意:必须保证表中数据符合即将添加的check条件,否则创建check约束失败。 ———————————————— 版权声明:本文为CSDN博主「你好1995」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lixintao95/article/details/90482181