gpt4 book ai didi

mysql - 这两个 SQL 查询有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:56 25 4
gpt4 key购买 nike

我用这个 SQL 查询创建了表 Address:

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$$

而且 booth 查询似乎创建了相同的表。

谁能给我解释一下这条线的作用:

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”赋予外键?如果那是真的——我应该这样做吗?我的意思是,我为什么要命名外键?我需要他们的名字吗?

谢谢! :)

最佳答案

MySQL 将 KEY 解释为索引,因此第二个查询在列 other_id 上创建索引。

两个FK声明的区别在于你在第二行手动设置了名称。在第一行,MySQL 自动设置了一个名称。
它们确实需要名称,但您不一定必须知道它们。当查询引发错误时,一些更高级的 RDBMS 使用它们来更加明确。

关于mysql - 这两个 SQL 查询有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7921836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com