我遇到了一个mariadb,一些表是这样创建的(我有一个完整的转储):
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`another_table_id` int(11) DEFAULT NULL,
`date_create` datetime DEFAULT NULL,
`closed` tinyint(1) DEFAULT NULL,
`a_field` int(11) DEFAULT NULL,
`another_field` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `another_table_id` (`another_table_id`),
KEY `ix_mytable_date_create` (`date_create`),
KEY `ix_mytable_closed` (`closed`),
CONSTRAINT `mytable_ibfk_1` FOREIGN KEY (`another_table_id`) REFERENCES `another_table` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12924 DEFAULT CHARSET=utf8mb4;
有很多众所周知的 PRIMARY KEY
以及 FOREIGN KEY
但是那些是什么 KEY
线?根据文件, PRIMARY
关键字不是必需的,所以它们都应该是主键。。。我注意到为他们所有人都创建了一个索引。如果我检查约束(我使用的是dbeaver),那么 id
作为主键存在。
1条答案
按热度按时间insrf1ej1#
它们只是普通的索引。我不知道你看了什么文件
PRIMARY
是可选的,但如果你看这里,你会看到一个语法部分:我们能看到的地方
{INDEX|KEY}
,描述如下:INDEX
以及KEY
是同义词。索引名称是可选的,如果未指定,将自动分配一个名称。当违反约束时,删除索引和出现在错误消息中需要索引名。
所以它们都应该是主键。。。
但主键的整个概念是为每个表选择一个唯一的键,并将该键声明为比任何其他此类键“更特殊”。每个表只能有一个主键。