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为自然数。(强烈建议加名字)
(父表的列必须是主键,否则会报异常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相关的记录。
①建表时加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约束失败。