84.Oracle数据库SQL开发之 修改表内存——数据库的完整性

169 阅读1分钟

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

         如果数据库允许执行这个删除操作,那么子行就无效了,因为它们不能指向父表中的有效值了。