`
langgufu
  • 浏览: 2307165 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

主键约束和外键约束的完整性

阅读更多

在执行DML语句(例如INSERT、UPDATE或DELETE)时,数据库会确保表中的行都可以维护自身的完整性。这就是说对表中行所做的任何修改都不能影响表的主、外键关系。

8.5.1  主键约束

下面来看几个介绍主键约束的例子。customers表的主键是customer_id列,这意味着customer_id列中保存的每一个值都必须是唯一的。如果试图插入一个与主键列值重复的行,数据库就会返回ORA-00001错误,例如:

*SQL> INSERT INTO customers (

2     customer_id, first_name, last_name, dob, phone

3   ) VALUES (

4   1, 'Jason', 'Price', '01-JAN-60', '800-555-1211'

5   );

INSERT INTO customers (

*

ERROR at line 1:

ORA-00001: unique constraint (STORE.CUSTOMERS_PK) violated

如果试图将主键值修改为表中已有的一个主键值,数据库也会返回同样的错误:

*SQL> UPDATE customers

2   SET customer_id = 1

3   WHERE customer_id = 2;

UPDATE customers

*

ERROR at line 1:

ORA-00001: unique constraint (STORE.CUSTOMERS_PK) violated

8.5.2  外键约束

所谓外键关系就是一个表中的列引用了其他表中的列。例如,products表中的product_type_id列引用了product_types表中的product_type_id列。 product_types表称为父表(parent table),而products表则称为子表(child table),这是因为products表中的product_type_id列依赖于product_types表中的product_type_id 列。

如果试图向products表中插入一行,但此行的 product_type_id不存在,数据库就会返回ORA-02291错误。这个错误说明数据库无法找到一个匹配的父键值(此处父键就是 product_types表中的product_type_id列)。在下面这个例子中,就返回这样一个错误,因为product_types表中不存在product_type_id为6的行:

*SQL> INSERT INTO products (

2     product_id, product_type_id, name, description, price

3   ) VALUES (

4   13, 6, 'Test', 'Test', NULL

5   );

INSERT INTO products (

*

ERROR at line 1:

ORA-02291: integrity constraint (STORE.PRODUCTS_FK_PRODUCT_TYPES)

violated - parent key not found

同理,如果试图将products表中一行的product_type_id列设置为一个不存在的父键值,数据库也会返回相同的错误。例如:

*SQL> UPDATE products

2   SET product_type_id = 6

3  WHERE product_id = 1;

UPDATE products

*

ERROR at line 1:

ORA-02291: integrity constraint (STORE.PRODUCTS_FK_PRODUCT_TYPES)

violated - parent key not found

如果试图从父表中删除已经有依赖子行的一行,数据库就会返回ORA-02292错误。例如,如果试图删除product_types表中product_type_id列为1的行,数据库就会返回ORA- 02292错误,因为products表中包含了product_type_id列等于1的行:

*SQL> DELETE FROM product_types

2  WHERE product_type_id = 1;

DELETE FROM product_types

*

ERROR at line 1:

ORA-02292: integrity constraint (STORE.PRODUCTS_FK_PRODUCT_TYPES)

violated - child record found

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

 

-----------------------------------------------------------------------------------

PowerDesigner

  参照完整性约束

  限制(Restrict)。不允许进行修改或删除操作。若修改或删除主表的主键时,如果子表中存在子记录,系统将产生一个错误提示。这是缺省的参照完整性设置。

  置空(Set Null)。如果外键列允许为空,若修改或删除主表的主键时,把子表中参照的外键列设置为空值(NULL)。

  置为缺省(Set Default)。如果指定了缺省值,若修改或删除主表的主键时,把子表中参照的外键设置为缺省值(Default)。

  级联(Cascade)。把主表中主键修改为一个新的值时,相应修改子表中外键的值;或者删除主表中主键的记录时,要相应删除子表中外键的记录。

分享到:
评论

相关推荐

    完整性约束,特别是参照完整性约束(主外键)

    完整性约束主要有三类:实体完整性、参照完整性和用户定义的完整性。 1. **实体完整性**:通常由主键来保证,主键是表中唯一标识一条记录的字段,不允许为空且在表中具有唯一性。主键约束确保了每个实体的唯一性,...

    数据完整性、主键和外键、数据类型

    ### 数据完整性、主键和外键、数据类型 #### 数据完整性 数据完整性是数据库设计中的一个核心概念,指的是确保数据库中的数据保持一致性和准确性。在实际应用中,数据完整性能够帮助我们防止非法或错误的数据被...

    数据主键和外键的错误总结

    它不仅有助于数据的完整性和一致性,还能提高数据库操作的效率。然而,在实际应用过程中,常常会遇到关于主键使用的不当之处。 1. **缺少主键**:有些表设计时没有明确指定主键,这可能导致后续的数据管理和查询变...

    主键与外键的创建

    在数据库设计中,主键和外键是两个关键概念,它们是关系数据库中确保数据完整性和一致性的核心机制。本文将深入探讨主键与外键的创建,帮助初学者更好地理解这两个概念。 **主键(Primary Key)**是用于唯一标识...

    oracle表主键和外键的区别

    在数据库设计中,主键和外键是两个关键的概念,它们在确保数据的完整性和一致性方面发挥着重要作用。主键和外键都是Oracle等关系型数据库管理系统(RDBMS)中的重要概念。 **主键**是定义一个表中起主要作用的数据项...

    数据库技术与应用 设置成绩表主键和外键约束-A学习任务书.doc

    在数据库设计中,主键和外键是两个关键的概念,它们用于确保数据的完整性和一致性。主键是一种特殊的唯一标识符,用于唯一地识别表中的每一行数据;而外键则是连接不同表之间的桥梁,它引用了另一个表的主键,以建立...

    SQL的主键和外键的作用.doc

    SQL的主键和外键是关系型数据库设计中的关键概念,它们对于确保数据的完整性和一致性至关重要。主键是用于唯一标识表中每一行记录的字段,而外键则是用于连接不同表之间的关联。 首先,主键的作用在于确保数据的...

    24.Oracle的主键和外键1

    在数据库设计中,主键和外键是确保数据完整性和一致性的重要工具,特别是在Oracle这样的关系型数据库管理系统中。主键和外键的概念以及它们的作用对于理解数据库的结构和操作至关重要。 首先,主键是表的一个或多个...

    MySQL的约束-外键约束

    在数据库设计中,数据完整性是至关...总结,外键约束是MySQL数据库设计中的关键组成部分,它保证了表之间的关联性,维持数据的完整性和一致性。理解并正确使用外键约束,对于构建健壮、可维护的数据库系统至关重要。

    Oracle定义约束 外键约束

    这样,就能够在一定程度上保证数据的完整性和一致性,避免出现“孤儿”记录或者引用不存在的数据。 #### 三、外键约束的实现步骤 以下是一系列步骤,用以演示如何在Oracle数据库中实现外键约束: 1. **创建父表...

    T_SQL建库建表加约束(主键,外键,检查,唯一等约束,插入数据)

    外键约束用于建立两个表之间的关系,确保引用完整性。例如,如果我们有一个`Departments`表,可以这样定义外键: ```sql CREATE TABLE Departments ( DepartmentID INT PRIMARY KEY, DepartmentName VARCHAR(50...

    oracle建表练习(主键外键)

    这两者的有效使用,不仅有助于维护数据的完整性和准确性,还能提高数据库查询的效率。 总结来说,通过本次练习,初学者不仅能够掌握Oracle数据库中创建表的基本语句,还能够了解到主键和外键在关系型数据库中的重要...

    主键、外键、唯一、约束区别

    在数据库设计中,主键、外键、唯一性和约束是至关重要的概念,它们共同确保了数据的准确性和...在实际应用中,根据业务需求和数据特性,合理使用这些工具,可以优化数据存储和查询性能,同时保持数据的完整性和一致性。

    第7章MySQL表定义与完整性约束控制.docx

    2. 实现数据完整性约束,例如主键约束、外键约束、唯一性约束和检查约束等。 本章详细介绍了 MySQL 表定义和完整性约束控制的知识点,涵盖了数据类型、表结构设计、数据完整性约束、索引和视图等方面,为读者提供了...

    oracle主键和外键[文].pdf

    在Oracle数据库中,主键和外键是关系型数据库中非常...在实际数据库设计中,要充分考虑这些约束的设置,以确保数据的完整性和业务逻辑的正确性。在进行表结构的修改时,需谨慎处理已有数据,避免因约束冲突导致的问题。

    基于MySQL数据库实施完整性约束的研究.pdf

    外键约束是将主表的某些列和子表的某些列关联在一起,以确保数据的完整性和统一性。例如: create table score (sid int, cid int, grade float, foreign key (sid) references stuinfo(sid), foreign key (cid) ...

    关于关系型数据库基本知识(主键、外键、一对一、一对多、多对一等).docx

    关系型数据库是现代数据存储和管理的核心,它采用关系模型,将数据组织成二维表格的形式。...在实际应用中,根据业务需求和数据规模,灵活运用这些关系可以有效地组织和管理数据,同时确保数据的完整性和一致性。

    数据库主键 (数据完整性)

    数据库完整性详解,十分详细,附有详细上机图以及步骤。

Global site tag (gtag.js) - Google Analytics