2011-09-08 113 views
36

这是什么代码之间的区别:主键定义CREATE TABLE语句

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关键字的同一问题。

+0

都是相同的,不是吗?它只是写作的方式。 –

+0

我也认为两者都是一样的。 – giga

+1

我不完全同意,请参阅@thomasrutter的答案 – waanders

回答

39

第二种语法只是一个快捷方式,允许您指定列并在其上添加索引。

如果您只是想创建一列并在其上添加索引,这可以很好地工作。

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

+4

谢谢!我喜欢带有论据的答案 – waanders

0

有很多方法可以给猫以上2个例子只是其中2个。它们是相同的。没有区别。

+0

我并不完全同意,请参阅@thomasrutter的回答 – waanders

+0

更准确地说,他提供的两个示例完全相同,但前一个示例允许使用比后者。 –

1

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

1

我看到它的方式是..第一种方法是用来创建复合键。如果表中只有主键,则主要使用第二种方法(对我更易读)。

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

相关问题