`
liss
  • 浏览: 842509 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

征服MySQL之 外键与参照完整性

阅读更多

参照完整性(Referential integrity)是数据库设计中一个重要的概念。在系统不同的列表中,当数据库所有参照合法或非合法关联时都会涉及到参照完整性。当参照完整性存在 时,任何与不存在记录的关联将变得无效化,由此可防止用户出现各种错误,从而提供更为准确和实用的数据库。

  参照完整性通常通过外键(foreign key)的使用而被广泛应用。长久以来,流行工具开源RDBMS MySQL并没有支持外键,原因是这种支持将会降低RDBMS的速度和性能。然而,由于很多用户对参照完整性的优点倍感兴趣,最近MySQL的不同版本都 通过新InnoDB列表引擎支持外键。由此,在数据库组成的列表中保持参照完整性将变得非常简单。

  为了建立两个MySQL表之间的一个外键关系,必须满足以下三种情况:

  • 两个表必须是InnoDB表类型。
  • 使用在外键关系的域必须为索引型(Index)。
  • 使用在外键关系的域必须与数据类型相似。

例子是理解以上要点的最好方法,新建一个parts的表,cpu字段用来存放所有的cpu配件型号,再新建一个pc的表,其中的cpumodel字段用来存放pc机中的cpu型号,显然,cpumodel字段中的所有记录应该存在于parts表中。

mysql > create table parts(
    
-> cpu char ( 20 ) not null ,
    
-> index (cpu)
    
-> )engine = innodb;
Query OK,
0 rows affected ( 0.01 sec)

mysql
> create table pc(
    
-> cpumodel char ( 20 ) not null ,
    
-> index (cpumodel),
    
-> foreign key (cpumodel) references parts(cpu)
    
-> )engine = innodb;
Query OK,
0 rows affected ( 0.01 sec)

注意:对于非InnoDB表, FOREIGN KEY 语句将被忽略。 对parts表添加数据1,2,3,接着对pc表进行测试,满足条件的 1 可以顺利insert进去,而不符合条件的字符 5 在insert表的时候,出现外键约束性错误,这正是我们想要的结果

mysql > insert into parts values ( ' 1 ' ),( ' 2 ' ),( ' 3 ' );
Query OK,
3 rows affected ( 0.00 sec)
Records:
3    Duplicates: 0    Warnings: 0

mysql
> insert into pc values ( ' 1 ' );
Query OK,
1 row affected ( 0.01 sec)


mysql
> insert into pc values ( ' 5 ' );
ERROR
1452 ( 23000 ): Cannot add or update a child row: a foreign key constraint fails (`Orange / pc`, CONSTRAINT `pc_ibfk_1` FOREIGN KEY (`cpumodel`) REFERENCES `parts` (`cpu`))



如以上例子解释的,外键在捉摸数据入口错误上起着重要的作用,由此可建立更为强健更加集成的数据库。另一方面值得提到的 是,执行外键核实是内部资料处理的过程,且不同表之间指定复杂的内部关系可以导致数据库的性能下降。所以,在参照完整性与性能考虑之间找到平衡点相当重 要,而使用外键就是能够确保性能与稳健之间的最优结合。

分享到:
评论

相关推荐

    Mysql增加外键的方法

    一旦外键被删除,与之相关的字段就可以被自由地删除或者修改了。 需要注意的是,不是所有的存储引擎都支持外键。只有InnoDB存储引擎支持外键约束,因此在创建数据表时,必须指定ENGINE=InnoDB。如果不设置,可能会...

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

    2. **参照完整性**:也称为外键约束,用于连接两个表,保证一个表中的外键值必须存在于另一个表的主键值中。这样,当对主表进行操作时,会影响到从表中的关联数据,防止了数据的不一致和丢失。 3. **用户定义的完整...

    外键.sql ~MySQL创建外键的操作

    MySQL 外键

    mysql的外键

    - 外键是用于链接两个表的字段,它引用了另一个表的主键,确保了数据的参照完整性和一致性。 - 引用表(父表)是包含被引用主键的表,而被引用表(子表)则是包含外键的表。 - 主键与外键之间的关系可以是一对一...

    mySql主外键关联例子

    知识点很简单,但是语句总忘,在这里写一个小例子,有助于大家记忆。mySql主外键关联例子

    mysql外键的添加与删除参考.pdf

    MySQL 外键是关系数据库管理系统中的一种约束机制,它能够确保数据的一致性和完整性。外键是指在一个表中字段的值必须存在于另一个表中的字段值中。MySQL 中的外键只能在 InnoDB 存储引擎中生效,而其他存储引擎将...

    SQL_(数据完整性)主键、外键

    SQL数据完整性 主键_外键_unique_check_primary

    MySQL数据库中数据参照完整性和一致性的设计与实现.pdf

    MySQL数据库中数据参照完整性和一致性的设计与实现 MySQL 作为后台数据库,应用非常广泛,在使用时会设计多个表,并且多个表之间存在关联关系,对于有联系的表而言,解决多表之间数据的一致性和参照完整性就显得尤...

    mysql外键设置

    - **简化查询操作**:例如,当需要查询某个产品的信息以及与之关联的订单信息时,如果设置了外键约束,则可以直接通过外键进行关联查询,提高查询效率。 ##### 2. 添加外键的格式 添加外键的基本语法如下: ```...

    MySQL外键的定义、作用、添加和删除

    MySQL 外键的定义、作用、添加和删除 外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有...外键是 MySQL 中的一个重要概念,它可以用来建立和加强两个表数据之间的连接,保证数据的参照完整性和可靠性。

    mysql 删除外键.png

    在MySQL数据库管理系统中,外键(Foreign Key)是一种约束机制,用于维护数据的一致性和完整性。外键确保了引用完整性,即一个表中的数据能够正确引用另一个表中的数据。当我们在设计关系型数据库时,使用外键可以...

    MySQL数据库中数据参照完整性和一致性的设计与实现_李艳杰1

    综上所述,MySQL数据库中数据参照完整性和一致性的设计与实现主要依赖于主键和外键的设置。主键确保了单个表内的数据唯一性,外键则确保了表与表之间的数据关联性,共同构建了一个可靠、一致的数据库结构。在进行...

    MySQL中利用外键实现级联删除、更新

    "MySQL 中利用外键实现级联删除、更新" ...MySQL 中的外键可以强制实施数据的一致性和完整性,使得数据更加可靠。级联删除和更新可以通过外键来实现,确保数据的一致性和完整性,使得数据更加可靠。

    MySQL命令行&MySql外键设置详解 .txt

    MySQL命令行&MySql外键设置详解 .txt

    掌握数据完整性:深入理解MySQL中的外键

    其中,参照完整性是通过外键约束来实现的,它是MySQL维护数据完整性的关键机制之一。 #### MySQL中的外键 外键(Foreign Key)是一种特殊的字段或字段组合,它在一个表中对应另一个表的主键。外键的主要作用是维护...

    mysql处理添加外键时提示error 150 问题的解决方法

    MySQL 处理添加外键时提示 Error 150 问题的解决方法 MySQL 中添加外键时,可能会遇到 Error 150 的问题,这个问题是 MySQL 本身的 bug,已经被报告到 MySQL 开发者列表中很多年了。然而,导致这个错误的原因却并...

    如何在MySQL数据库中定义外键

    ### 如何在MySQL数据库中定义外键 #### 定义数据表 ...综上所述,通过以上步骤,我们不仅可以在 MySQL 数据库中成功定义外键,还可以根据业务需求选择合适的级联操作来进一步增强数据的一致性和完整性。

    MySQL外键使用及说明详解

    MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 外键的使用条件:  1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);  2.外键列必须建立了索引,...

    mysql建立外键

    建立外键的前提:本表的列必须与外键类型相同(外键必须是外表主键)。 外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键...

Global site tag (gtag.js) - Google Analytics