相关疑难解决方法(0)

为什么外键在理论上比在实践中更多?

当你研究关系理论时,外键当然是强制性的.但实际上,在我工作的每个地方,表产品和连接总是通过在查询中明确指定键来完成,而不是依赖于DBMS中的外键.

这样,您当然可以按字段连接两个表,这些字段不是外键,具有意外结果.

你为什么这么认为?DBMS是否应该强制只使用外键来创建联接和产品?

编辑:谢谢你的所有答案.现在我很清楚,FK的主要原因是参考完整性.但是如果你设计一个DB,模型中的所有关系(ERD中的IE箭头)都会成为外键,至少在理论上,无论你是否在DBMS中定义它们,它们都是语义上的FK.我无法想象需要通过不是FK的字段来连接表.有人能给出一个有意义的例子吗?

PS:我知道N:M关系变成了单独的表而不是外键,为简单起见省略了它.

sql database foreign-keys

49
推荐指数
6
解决办法
2万
查看次数

重命名InnoDB表而不更新外键引用?

我试图用新表替换InnoDB表,我希望所有指向旧表的外键引用指向新表.

所以我尝试了这个:

SET foreign_key_checks = 0;
ALTER TABLE foo RENAME foo_old;
ALTER TABLE foo_new RENAME foo;
Run Code Online (Sandbox Code Playgroud)

不幸的是,即使禁用了foreign_key_checks,指向foo的所有引用都会更改为指向foo_old.现在我正在寻找

  • 一种在不重建整个表的情况下更改外键引用的方法,或者
  • 一种重命名表而不更新外键引用的方法.

我尝试删除外键并重新创建它们,但由于表格很大,需要几个小时.替换表的重点是在有限的停机时间内进行模式更改.

mysql innodb

32
推荐指数
4
解决办法
1万
查看次数

标签 统计

database ×1

foreign-keys ×1

innodb ×1

mysql ×1

sql ×1