【问题标题】:Auto increment column自动增量列
【发布时间】:2010-10-16 13:31:11
【问题描述】:

我想在数据库表中创建一个 AUTO_INCREMENT 列,这是我编写的语法:

create table comments
(
     name varchar(20),
     mail varchar(30),
     comment varchar(100),
     com_no int auto_increment
);

我收到以下错误:

ERROR 1075 (42000):表定义不正确;只能有一个自动列,并且必须定义为一个键

然后我把它作为主键:

create table comments
(
    name varchar(20),
    mail varchar(30),
    comment varchar(100),
    com_no int primary_key auto_increment
);

我收到以下错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'primary_key auto_increment,name varchar(20),mail varchar(30),comment varchar(100' 附近使用正确的语法

怎么了???

【问题讨论】:

  • 当您提出特定于 MySQL 的问题时(因为大多数其他 SQL RDBMS 不使用 AUTO_INCREMENT),那么您应该使用 mysql 标记来标记您的问题。

标签: mysql sql mysql-error-1075


【解决方案1】:

PRIMARY KEY,不带下划线。

create table comments
(
    name varchar(20),
    mail varchar(30),
    comment varchar(100),
    com_no int primary key auto_increment
);

create table comments
(
    name varchar(20),
    mail varchar(30),
    comment varchar(100),
    com_no int auto_increment,
    primary key(`com_no`)
);

【讨论】:

  • int unsigned 可能会更好
【解决方案2】:
 create table comments(
    name varchar(20), 
    mail varchar(30),
    comment varchar(100),
    com_no int auto_increment,
    PRIMARY KEY (com_no)
  );

(根据在线 MySQL 手册)。

【讨论】:

  • 是的,但你的更精致,开头的括号在自己的一行上。
【解决方案3】:
create table comments
(
    name varchar(20),
    mail varchar(30),
    comment varchar(100),
    com_no int NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (com_no)
);

ref.

【讨论】:

    【解决方案4】:

    使用primary key 代替primary_key

    【讨论】:

      【解决方案5】:

      正确的语法是这样的,例如:

      CREATE TABLE `admin` (
          `id` INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
          `userid` VARCHAR(50) NULL DEFAULT '0',
          `pwd` VARCHAR(50) NULL DEFAULT NULL,
          PRIMARY KEY (`id`)
      )
      

      【讨论】:

      • id int unsigned auto_increment 主键完全有效。不知道为什么你将显示宽度指定为 5,为什么要在这种情况下使用一个呢?
      【解决方案6】:

      MySQL 中,只能有一个auto increment 列(通常称为identity column),它也应该定义为unique key。例如:

      create table comments
      (
        com_no int NOT NULL AUTO_INCREMENT,
        name varchar(20),
        mail varchar(30),
        comment varchar(100),
        PRIMARY KEY (com_no)
      );
      

      详情请见MySQL auto increment documentation

      【讨论】:

        猜你喜欢
        • 2013-09-23
        • 1970-01-01
        • 2014-07-06
        • 2019-05-11
        • 2011-12-05
        • 2013-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多