mariadb表中的所有“key”规范是什么?

fdbelqdn  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(360)

我遇到了一个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 作为主键存在。

insrf1ej

insrf1ej1#

它们只是普通的索引。我不知道你看了什么文件 PRIMARY 是可选的,但如果你看这里,你会看到一个语法部分:

index_definition:
    {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option] ...
  | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...) [index_option] ...
  | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) [index_option] ...
  | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option] ...
  | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition

我们能看到的地方 {INDEX|KEY} ,描述如下: INDEX 以及 KEY 是同义词。
索引名称是可选的,如果未指定,将自动分配一个名称。当违反约束时,删除索引和出现在错误消息中需要索引名。
所以它们都应该是主键。。。
但主键的整个概念是为每个表选择一个唯一的键,并将该键声明为比任何其他此类键“更特殊”。每个表只能有一个主键。

相关问题