【问题标题】:Autoincrement Id and key problem (MySQL)自动增量 ID 和关键问题 (MySQL)
【发布时间】:2011-07-16 04:08:44
【问题描述】:

我有桌子,我试着添加

`id` int(11) NOT NULL auto_increment,

到桌子,但我得到了

ERROR 1075: Incorrect table definition; There can only be one auto column and it must be defined as a key

所以问题是:

  1. 如何找到哪一个是关键列
  2. 我可以毫无问题地更改它并添加新的 ID 字段(使用自动增量)吗?

【问题讨论】:

  • 发布show create table <tablename>的输出

标签: mysql sql mysql-error-1075


【解决方案1】:

首先备份数据库。然后删除与表关联的任何外键。截断外键表。截断当前表。使用自动增量添加 id。使用 sqlyog 或 workbench 或 heidisql 或 dbeaver 或 phpmyadmin。然后使用批量更新从备份中插入表。

【讨论】:

    【解决方案2】:

    没有人使用无符号整数作为主键。当您甚至不使用 zerofill 时,为什么还要使用可选的显示宽度,即 int(11) !!

    drop table if exists foo;
    create table foo
    (
     id int unsigned not null auto_increment primary key,
     ...
    )
    engine=innodb;
    

    【讨论】:

    • 这个在一段时间后效率更高,他的表中无法存储最大数量。
    【解决方案3】:

    如果表已经创建,使用 ALTER:

    ALTER TABLE `table` ADD COLUMN `id` INT(11) NOT NULL AUTO_INCREMENT, 
    DROP PRIMARY KEY, 
    ADD PRIMARY KEY (`id`)
    

    如果正在创建表,则必须将 auto_increment 设置为主键:

    CREATE TABLE IF NOT EXISTS `database`.`table` (
    `id`INT(11) NOT NULL AUTO_INCREMENT ,
    `a` VARCHAR(45) NULL ,
    `b` VARCHAR(255) NULL ,
    `c` VARCHAR(45) NULL ,
    PRIMARY KEY (`id`))
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8
    COLLATE = utf8_unicode_ci
    

    【讨论】:

      【解决方案4】:
      ALTER TABLE `database`.`table_name` ADD COLUMN `new_column_name` INT NOT NULL AUTO_INCREMENT  AFTER `last_column_name_in_the_table` , CHANGE COLUMN `old_column_name` `old_column_name` INT(11) NOT NULL  
      
      , DROP PRIMARY KEY 
      
      , ADD PRIMARY KEY (`new_column_name`) ;
      

      您只需按照 matthewh 的建议运行 show create table 即可找到当前主键,并在输出中查找类似内容:

      主键 (old_column_name),

      如果可以使用,您还应该查看 MySQL Workbench。它使进行这样的更改变得非常容易。

      【讨论】:

        【解决方案5】:
        `id` int(11) NOT NULL auto_increment primary key,
        

        必须是主键

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-03
          相关资源
          最近更新 更多