MySQL CREATE TABLE语句中的PRIMARY KEY定义

这段代码有什么区别:

CREATE TABLE samples (
  sampleid INT(11) NOT NULL AUTO_INCREMENT,
  sampledate DATE NOT NULL,
  location VARCHAR(25) NOT NULL,
  PRIMARY KEY (sampleid)
)
ENGINE=InnoDB;

还有这个:

CREATE TABLE samples (
  sampleid INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  sampledate DATE NOT NULL,
  location VARCHAR(25) NOT NULL,
)
ENGINE=InnoDB;

码?

因此,单独的PRIMARY KEY语句或作为列定义的一部分。 列定义中对UNIQUE INDEX和UNIQUE关键字的问题相同。

waanders asked 2020-02-14T08:17:16Z
5个解决方案
48 votes

第二种语法仅仅是一种快捷方式,允许您指定列并在单个子句中为其添加索引。

在您只想创建一列并在其上添加索引的情况下,这样做效果很好。

如果您想做更复杂的事情,则需要使用第一种语法,例如,基于多个列而不是单个列添加索引,或者要在现有列上添加或更改索引; 也就是说,您不会同时创建列和索引。

thomasrutter answered 2020-02-14T08:28:52Z
3 votes

MySQL允许使用PRIMARY KEY指令来允许您动态设置主键。 仅在创建列时调用提供PRIMARY KEY作为构造函数的参数。 主键(X),主键(Y),主键(Z)允许在后续查询中更改主键。

htmldrum answered 2020-02-14T08:29:14Z
1 votes

我的看法是。第一种方法用于创建复合键。 如果表中只有主键,则主要使用第二种方法(对我来说更易理解)。

如果要实现复合键,则不能使用第二种方法

user4826347 answered 2020-02-14T08:29:39Z
0 votes

剥皮猫的方法有很多,上面的两个例子只是其中的两个。 它们是相同的。 没有区别

Icarus answered 2020-02-14T08:29:59Z
0 votes

它们实际上是相同的。 这是一个快速的网站,向您展示了执行此操作的不同方法(3)。 [http://www.java2s.com/Code/SQL/Key/Defineanduseprimarykey.htm]

TIHan answered 2020-02-14T08:30:20Z
translate from https://stackoverflow.com:/questions/7350401/primary-key-definition-in-mysql-create-table-statement