这段代码之间的区别是什么:

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;

密码

因此,可以使用单独的主键语句或作为列定义的一部分.列定义中的唯一索引和唯一关键字也有同样的问题.

推荐答案

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

如果您只想创建一个列并在其上添加一个索引,那么这种方法就可以了.

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

Mysql相关问答推荐

MySQL 8.0.28覆盖(和函数)索引未使用

SQL中的搜索模式

在MySQL中查找具有公共值的列名

左联接重复问题

用于将具有多个状态更改日期列的单行转换为具有状态和时间戳的多行的SQL查询

根据 JOIN 结果计算列中的值?

基于关系的每个实体有一个真值和多个假值

MySQL - 如何查询涉及前面计算值的表结果

了解 Spring 和数据库级别的事务?

如何使用同一个表在 2 个字段上左连接

如何查询打印已售罄的产品? [MYSQL]

为什么从我的 SQL 查询中删除 BINARY 函数调用会如此显着地改变查询计划?

如何在 Mysql 中创建复合外键

使用带有 ELSEIF 和 ELSE 的 3 列更新问题

phpmyadmin没有收到要导入的数据错误,如何解决?

如何将时刻 JS 时间插入 MySQL

在mysql中增量更新值

MySQL - 我如何输入 NULL?

在网页的 HTML 表中显示 MySQL 数据库表中的值

mysql GROUP_CONCAT 重复