我们大家都知道MySQL参照完整性一般是通过MySQL外键(foreign key)的具体使用而随之应用。总的来说,流行工具开源 RDBMS MySQL(与PHP搭配之最佳组合)并不支持外键,原因是这种支持将会降低RDBMS的速度和性能。 然而,由于很多用户对参照完整性的优点倍感兴趣

我们大家都知道MySQL参照完整性一般是通过MySQL外键(foreign key)的具体使用而随之应用。总的来说,流行工具开源 RDBMS MySQL(与PHP搭配之最佳组合)并不支持外键,原因是这种支持将会降低RDBMS的速度和性能。

然而,由于很多用户对参照完整性的优点倍感兴趣,最近MySQL(和PHP搭配之最佳组合)的不同版本都通过新InnoDB列表引擎支持外键。由此,在数据库组成的列表中保持参照完整性将变得非常简单。

为了建立两个MySQL(和PHP搭配之最佳组合)表之间的一个MySQL外键关系,必须满足以下三种情况:

两个表必须是InnoDB表类型。

使用在外键关系的域必须为索引型(Index)。

使用在MySQL外键关系的域必须与数据类型相似。

例子是理解以上要点的最好方法。如表A所示,建立两个表,其中一个列出动物种类及相应的代码(表名为:species),另一表列出动物园中的动物(表名为:zoo)。现在,我们想通过species关联这两个表,所以我们只需要接受和保存zoo表中包含species表中的合法动物的入口到数据库中。

表A

MySQL(和PHP搭配之最佳组合)> CREATE TABLE species (id TINYINT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, Prima(最完善的虚拟主机管理系统)RY KEY(id)) ENGINE=INNODB;

Query OK, 0 rows affected (0.11 sec)

MySQL(和PHP搭配之最佳组合)>INSERT INTO species VALUES (1, 'orangutan'), (2, 'elephant'), (3, 'hippopotamus'), (4, 'yak');

Query OK, 4 rows affected (0.06 sec)

Records: 4 Duplicates: 0 Warnings: 0

MySQL(和PHP搭配之最佳组合)> CREATE TABLE zoo (id INT(4) NOT NULL, name VARCHAR(50) NOT NULL, FK_species TINYINT(4) NOT NULL, INDEX (FK_species), FOREIGN KEY (FK_species) REFERENCES species (id), Prima(最完善的虚拟主机管理系统)RY KEY(id)) ENGINE=INNODB;

注意:对于非InnoDB表, FOREIGN KEY 语句将被忽略。

现在,fieldszoo.species与species.id 之间存在一个MySQL外键关系。只有相应的zoo.specie与species.idfield的一个值相匹配,动物表中的入口才可被访问。以下的输出即演示了当你想输入一个Harry Hippopotamus记录,而使用到不合法的species代码:

MySQL(和PHP搭配之最佳组合)> INSERT INTO zoo VALUES (1, 'Harry', 5);

ERROR 1216 (23000): Cannot add or update a child row: a foreign key constraint fails

这里,MySQL(和PHP搭配之最佳组合)核查species表以查看species代码是否存在,如果发现不存在,就拒绝该记录。当你输入正确代码的,可以与以上做比较。

MySQL(和PHP搭配之最佳组合)> INSERT INTO zoo VALUES (1, 'Harry', 3);

Query OK, 1 row affected (0.06 sec)

这里,MySQL(和PHP搭配之最佳组合)核查species表以查看species代码是否存在,当发现存在,允许记录保存在zoo表中。

为了删除一个MySQL外键关系,首先使用SHOW CREATE TABLE找出InnoDB的内部标签,如表B所示:

表 B

+-------+---------------------------------------------------+

| Table | Create Table |

+-------+---------------------------------------------------+

| zoo | CREATE TABLE `zoo` (

`id` int(4) NOT NULL default '0',

`name` varchar(50) NOT NULL default '',

`FK_species` tinyint(4) NOT NULL default '0',

KEY `FK_species` (`FK_species`),

CONSTRAINT `zoo_ibfk_1` FOREIGN KEY (`FK_species`)

REFERENCES `species` (`id`)

)ENGINE=InnoDBDEFAULTCHARSET=latin1|

+-------+----------------------------------------------------+

然后使用带有DROP FOREIGN KEY 语句的ALTER TABLE命令,如以下:

MySQL(和PHP搭配之最佳组合)> ALTER TABLE zoo DROP FOREIGN KEY zoo_ibfk_1;

Query OK, 1 row affected (0.11 sec)

Records: 1 Duplicates: 0 Warnings: 0

为了将一个外键添加到一个现成的表中,使用ADD FOREIGN KEY的 ALTER TABLE语句指定合适的域作为一个外键:

MySQL(和PHP搭配之最佳组合)> ALTER TABLE zoo ADD FOREIGN KEY (FK_species) REFERENCES species (id);

Query OK, 1 rows affected (0.11 sec)

Records: 1 Duplicates: 0 Warnings: 0

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

我期望本期的有关MySQL外键的介绍对你有所好处,你将会在下回的MySQL(和PHP搭配之最佳组合)数据库设计中感受到外键的好处。编程快乐!

mysql建立参照完整性,MySQL外键和参照完整性的实现步骤相关推荐

  1. MySQL表的非外键约束

    MySQL表的非外键约束 /* 建立一张用来存储学生信息的表  字段包含学号.姓名.性别,年龄.入学日期.班级,email等信息  学号是主键 = 不能为空 +? 唯一  姓名不能为空  性别默认值是 ...

  2. MySQL中如何定义外键[转]

    MySQL中如何定义外键 假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息.用来保存整机产品信息的表叫做pc:用来保存配件供货信息的表叫做parts. 在pc表中有一个字段,用来描述这款电脑 ...

  3. mysql是否推荐使用外键_MySQL 外键使用

    MySQL 外键使用 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持): 2.外键列必须建立了索引,MySQL 4.1.2以 ...

  4. 【MYSQL】foreign key 外键约束(详解)

    外键是关联不同表之间的一个联接,比如我们现在有两张表: 那么如何设置外键呢? mysql> create table class(classId int primary key auto_inc ...

  5. mysql的常见的外键约束

    一  mysql的常见的外键约束策略 设计外键时,mysql提供了4种外键关联策略 1.RESTRICT 限制(默认) 如果有外键关联了tb_class 的id,则tb_class 不能删除被关联的记 ...

  6. mysql怎么写主外键_mysql主外键约束怎么写?

    mysql主键约束的写法:"CREATE TABLE 表名(字段名 数据类型 PRIMARY KEY)":mysql外键约束的写法:"CREATE TABLE 表名(FO ...

  7. MySQL为表添加外键约束

    为表添加外键约束的语法 Alter table 表名 add constraint FK_ID foreign key(外键字段名) REFERENCES 外表表名(主键字段名): 为表student ...

  8. 数据库技术mysql能干什么_MySQL外键有什么作用

    MySQL外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据.使两张表形成关联,外键只能引用外表中列的值! 我们来建两个表 CREATE TABLE `example1` ( ` ...

  9. mysql主外键引用关系,关于mysql:数据主/外键关系

    我想对于那些已经开发了许多数据库模式的人来说,这将是一个简单的答案,但是我最近发现自己承担了优化(或尝试优化)数据库模式的任务,并且一直在阅读"高性能MySQL",并且剩下一个关于 ...

最新文章

  1. 北纬39°54上的采访
  2. 码crc校验_CRC计算
  3. springmvc三: REST
  4. seo建设者_前5名最佳免费和付费网站建设者
  5. 王爽《汇编语言第三版》实验10-1代码实现
  6. 图论——P问题、NP问题、NPC问题、NP-hard问题
  7. UI设计实用干货素材|引导页模板
  8. 计算机知识体系图谱总结
  9. 开源项目学习之(一)------zheng环境搭建
  10. HTML制作水波纹,怎样制作水波纹
  11. 循环神经网络的从零开始实现
  12. halcon物体周边毛刺检测
  13. java import imageio_是否可以使用Java ImageIO从InputStream读取多个...
  14. 【Android 】零基础到飞升 | Service初涉
  15. 【声卡宿主】ProTools 2021.7.0使用安装教程
  16. Guava 系列 - Guava基础
  17. 招人:没钱靠谱的我们想和你一起探索人生的可能性
  18. python证书微软认证_怎样考取微软工程师?
  19. 家里没网络怎么自学html,家里没网了怎么办?不要慌,学会这两招自己就能解决...
  20. oTMS携手阿里云:互联互通运输管理软件背后的大数据升级

热门文章

  1. Android开发中NDK开发的作用
  2. 小程序源码:多功能喝酒神器-多玩法安装简单
  3. java onchange_select中onchange的用法
  4. python 通过ping获取丢包率
  5. OOM问题小例子及思考
  6. html移除disabled属性,JQuery设置和去除disabled属性
  7. 加密托管风起:做区块链世界的银行
  8. 基于Docker搭建hdfs分布式实验环境
  9. JAVA日期时间的计算
  10. VUE值$refs的使用