2

我有一个带有外键约束的数据库,其中 int(10) 引用了 int(11)。我也有 int(11) 参考 int(10)。

他们没有任何错误。这会在未来引起问题吗?(除了整数空间不足的问题)

尝试更改 varchar 的列大小时,我遇到了一种相关问题:

mysql 5.6 外键约束错误;5.5 中没有出现

4

1 回答 1

4

没问题。就存储和值范围而言,INT(10) 和 INT(11) 是完全相同的数据类型(32 位有符号整数)。整数参数只是显示的提示。

不同长度的 varchar 列也可以在外键关系中使用。显然,这些确实具有它们允许的不同值范围。不过没关系。

例如,父表具有较短的 VARCHAR(10),而子表具有 VARCHAR(20)。子表仍然不能使用超过 10 个字符的字符串,因为它必须匹配父表中的字符串,而且根本不会超过 10 个字符。

它也可以反向工作;如果父母有 VARCHAR(20) 而孩子有 VARCHAR(10)。子表将无法在父表中引用较长的字符串,但从不强制子表引用父表中的每个值,只有它可以引用的值。

基于此推理,您可能认为相同的逻辑适用于整数,因此 SMALLINT 应该能够引用 BIGINT。但是 MySQL 不允许这样做。

于 2013-10-14T17:15:35.217 回答