WEB开发网
开发学院数据库MySQL Mysql入门系列:MySQL不支持的功能 阅读

Mysql入门系列:MySQL不支持的功能

 2006-12-31 10:46:16 来源:WEB开发网   
核心提示: ■ 外部键和引用完整性,外部键允许定义一个表中的键与另一个表中的键相关,Mysql入门系列:MySQL不支持的功能(5),而引用完整性允许放置对包含外部键的表可以做什么的约束,例如,假如想要删除13 号学生,这也隐含表示需要删除该学生的学分记录, samp_db 样例数据库的score 表

■ 外部键和引用完整性。外部键允许定义一个表中的键与另一个表中的键相关,而引用完整性允许放置对包含外部键的表可以做什么的约束。例如, samp_db 样例数据库的score 表中包含一个student_id 列,我们用它来将学分记录关联到student 表中的学生。score.student_id 将定义为支持此概念的数据库中的一个外部键,我们将在其上加上一条约束,使不能为student 表中不存在的学生输入学分记录。此外,应该允许级联删除,以便如果某个学生从student 表中被删除后,该学生的任何学分记录将会自动地从

score 表中删除。

外部键有助于保持数据的一致性,而且还提供了某种方便的手段。MySQL不支持外部键的原因主要是由于它对数据库的实现与维护有负作用。(MySQL参考指南详细列出了这些原因。)注意,对于外部键的这种看法与其他数据库文献中的看法有些不同,有的数据库文献通常将它们描述成“基本的”。MySQL的开发者并不赞同这个观点。如果您赞成,那么最好是考虑采用其他提供外部键支持的数据库。如果数据具有特别复杂的关系,您可能不希望担负在应用程序中实现这些相关性的工作。(即使这样做的工作量要比增加几个额外的DELETE 语句的工作量要稍少一些。)除了在一定程度上能够在CREATE TABLE 语句中分析FOREIGN KEY 子句外,MySQL不支持外部键。(这有助于使从其他数据库移植代码到MySQL更为容易。)MySQL不强制让外部键作为一种约束,也不提供级联删除功能。

外部键强制实施的约束一般不难用程序逻辑来实现。有时,它只是一个怎样进行数据录入处理的问题。例如,为了将一个新记录插入score 表,不太可能插入不存在的学生的学分。显然,输入一组学分的方法应该是根据从student 表得出的学生名单,对每个学生,取其学分并利用该学生的ID 号产生一个score 表的记录。对于这个过程,不存在录入一个不存在的学生的记录的可能。您不会凭空造出一个学分记录来插入score 表。要实现DELETE 的级联效果,必须用自己的应用程序逻辑来完成。假如想要删除13 号学生。这也隐含表示需要删除该学生的学分记录。在支持级联删除的数据库中,只需要用如下的语句就可以删除student 表的记录和相应的score 表的记录:

上一页  1 2 3 4 5 6  下一页

Tags:Mysql 入门 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接