【发布时间】:2011-10-27 20:18:34
【问题描述】:
我已经用这个 SQL 查询创建了表地址:
CREATE TABLE `address` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`Street` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`Number` smallint(6) DEFAULT NULL,
`other_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`other_id`) REFERENCES `other` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
但也有这样的查询:
CREATE TABLE `address` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`Street` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`Number` smallint(6) DEFAULT NULL,
`other_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `other_id` (`other_id`),
CONSTRAINT `adress_ibfk_1` FOREIGN KEY (`other_id`) REFERENCES `other` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci$$
而且展位查询似乎创建了相同的表。
那么谁能给我解释一下这条线是做什么的:
KEY `other_id` (`other_id`),
这两行有什么区别:
FOREIGN KEY (`other_id`) REFERENCES `other` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
and
CONSTRAINT `adress_ibfk_1` FOREIGN KEY (`other_id`) REFERENCES `other` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
如果最后两行之间的区别是后者将名称'adress_ibfk_1'赋予外键?如果这是真的 - 我应该这样做吗?我的意思是,我为什么要命名外键?我需要他们的名字吗?
谢谢! :)
【问题讨论】:
-
如果您不修正表名以正确拼写地址,您项目中的所有开发人员将永远讨厌您。
-
@HLGEM:哦,我还以为是存放一件女性派对服装的地方。
-
@HLGEM - 除非表名是瑞典语:)。但是由于字段名称不是瑞典语,所以您可能是正确的。
-
您认为您将在 MASSIVE UNSIGNED BIGINT 中存储多少地址?您的其他数据类型也需要解决!
标签: mysql sql foreign-keys relational-database