【发布时间】:2021-07-31 19:11:50
【问题描述】:
我见过三种定义主键的方法。
-
连同其列名定义一起定义:
CREATE TABLE test ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, -- other fields ); -
在表定义的末尾定义键:
CREATE TABLE test ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, -- other fields PRIMARY KEY (id) ); -
创建表后添加主键索引。通常我在 phpMyAdmin 导出的 .sql 文件中看到了这一点。 (是否取决于使用的存储引擎?)
CREATE TABLE test ( id INT UNSIGNED NOT NULL, -- other fields ); ALTER TABLE test ADD PRIMARY KEY (id), MODIFY id INT UNSIGNED NOT NULL AUTO_INCREMENT;
所有这些方法的内部区别是什么?
大多数情况下,我发现使用第三种方法导入 SQL 文件比使用其他方法需要更长的时间。
编辑(在Bill Karwin告诉“(该)示例显示没有数据导入”之后):
上面的例子不包含INSERT查询,但是如果每个CREATE TABLE查询后面都有INSERT语句插入数据会有什么区别?
【问题讨论】:
-
它们之间没有区别。
-
这个(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,)是不正确的,因为没有key的时候不能定义AUTO_INCRMENT。 -
@Luuk 感谢您的指出。我已相应地对帖子进行了更正。
-
我真的认为在回答第一个问题后将您的问题编辑为另一个问题是不对的。如果您有新问题,请提出新问题,如果此问题已回答,请将其标记为已回答。