84.Oracle数据库SQL开发之 修改表内存——数据库的完整性
欢迎转载,转载请标明出处:blog.csdn.net/notbaron/ar…\
在执行DML语句例如INSERT、UPDATE或DELETE时,数据库会确保表中的行都可以维护自身的完整性。
1. 主键约束
如果视图插入一个与主键列值重复的行,数据库就会返回ORA-00001错误。
如下:
store@PDB1> insert into customers(customer_id,first_name,last_name,dob,phone) values ( 1,'Jason','price','01-jan-60','800-555-1211');
insert into customers(customer_id,first_name,last_name,dob,phone) values (1,'Jason','price','01-jan-60','800-555-1211')
*
ERROR at line 1:
ORA-00001:unique constraint (STORE.CUSTOMERS_PK) violated
2. 外键约束
外键关系就是一个表中的列引用其其他表中的列。
例如:products表中的product_type_id列引用了product_types表中的product_type_id列。就是products表中的product_type_id列依赖于product_types表中的product_type_id列。
执行如下:
store@PDB1> insert into products (product_id,product_type_id,name,description,price ) values ( 13,6,'Test','Test',NULL);
insert into products (product_id,product_type_id,name,description,price ) values (13,6,'Test','Test',NULL)
*
ERROR at line 1:
ORA-02291: integrity constraint(STORE.PRODUCTS_FK_PRODUCT_TYPES) violated - parent key not found
因为product_types表中不存在product_type_id为6的行。
此外,如果从附表中删除已经有依赖子行的一行,数据库就会返回ORA-02292错误。
例如:
store@PDB1> delete from product_types whereproduct_type_id=1;
delete from product_types whereproduct_type_id=1
*
ERROR at line 1:
ORA-02292: integrity constraint (STORE.PRODUCTS_FK_PRODUCT_TYPES)violated - child record found
如果数据库允许执行这个删除操作,那么子行就无效了,因为它们不能指向父表中的有效值了。