通行证: 用户 密码 网站建设  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>数 据 库>>MySQL>>正文 新版上线![旧版]
注:打开慢时请稍等

Mysql开发中的外键与参照完整性

http://www.iyit.net  日期:2006-12-14 16:04:03  来源:  点击:
参加讨论 

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

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

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

两个表必须是InnoDB表类型。

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

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

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

表A

mysql> CREATE TABLE species (id TINYINT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, PRIMARY KEY(id)) ENGINE=INNODB;

Query OK, 0 rows affected (0.11 sec)

mysql> 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> 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), PRIMARY KEY(id)) ENGINE=INNODB;

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

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

mysql> INSERT INTO zoo VALUES (1, 'Harry', 5);

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

这里,MySQL核查species表以查看species代码是否存在,如果发现不存在,就拒绝该记录。当你输入正确代码的,可以与以上做比较。

mysql> INSERT INTO zoo VALUES (1, 'Harry', 3);

Query OK, 1 row affected (0.06 sec)

这里,MySQL核查species表以查看species代码是否存在,当发现存在,允许记录保存在zoo表中。

为了删除一个外键关系,首先使用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=InnoDB DEFAULT CHARSET=latin1 |

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

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

mysql> ALTER TABLE zoo DROP FOREIGN KEY zoo_ibfk_1;

本新闻共2页,当前在第1页  1  2  


编辑: [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:在MySQL数据库增加新用户权限简介
下一篇:没有了
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
在MySQL数据库增加新用户权限简介 MY SQL常用命令 Google数据库
Oracle数据库访问限制绕过漏洞 以独占方式打开Access数据库
最新更新 热点排行 推荐新闻
Mysql开发中的外键与参照完整性 
在MySQL数据库增加新用户权限简介
远程连接mysql资料
mysql密码忘记的修改
MySQL初学者使用指南
Mysql开发中的外键与参照完整性 
在MySQL数据库增加新用户权限简介
web3.0概念!!什么是web3.0?web3.0是
黑客利用Word漏洞破坏电脑存储系统
baidu 李彦宏谈进军日本 不怕谷歌雅虎
流氓软件7939升级为病毒 随意改写首页
商业周刊:点击欺诈使Google遭两难境地
Vista可受多种病毒感染 微软否认该漏洞
前百度工程师出走后纷纷复制创业密码
立免费贵族牌坊 奢侈《征途》命有多长
Mysql开发中的外键与参照完整性 
在MySQL数据库增加新用户权限简介
最新永久免费网游年列表,免费3d网游
永久免费网游《刀OL》11月3日开放新服
远程破解盗窃QQ密码的各种方法
Windows的右键菜单设置与应用技巧
windows下如何修改右键菜单
安装IE7.0密技 绕过WGA 完美轻松搞定
msn8.0下载、msn shell、msn8.0中文版
流氓软件清理助手下载
秘籍:右键菜单终极锤炼术
应用readyboost实测闪存是否能提高VIS
在MySQL数据库增加新用户权限简介
在win2003下MySQL数据库每天自动备份
Win2000 Apache PHP MySQL 安装及安全
MySQL账户相关
远程连接sql server 2000服务器的解决
在MySQL数据库增加新用户权限简介
黑客利用Word漏洞破坏电脑存储系统
流氓软件7939升级为病毒 随意改写首页
Vista可受多种病毒感染 微软否认该漏洞
前百度工程师出走后纷纷复制创业密码
07年安全方面你应该注意的10件事
sxs.exe病毒清理办法,手动清楚方法 ̄!
三种常见中文内码的转换方法!
Windows Vista 5840简体中文版体验心得
电脑主板知识大全图文版 

设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息