【问题标题】:I need to auto_increment a field in MySQL that is not primary key我需要自动增加 MySQL 中不是主键的字段
【发布时间】:2010-11-12 04:28:29
【问题描述】:

现在,我有一个主键是auto_increment 字段的表。但是,我需要将主键设置为usernamedate(以确保不能有重复的用户名和日期)。

但是,我需要 auto_increment 字段来更改行信息(添加和删除)。

这种情况通常会怎么做?

谢谢!

【问题讨论】:

    标签: mysql primary-key auto-increment


    【解决方案1】:

    只需在(用户名,日期)的组合上设置一个唯一索引。

    ALTER TABLE `table` ADD UNIQUE INDEX `name` (`username`, `date`);
    

    或者,您可以尝试

    ALTER TABLE `table` DROP PRIMARY KEY, ADD PRIMARY KEY(`username`,`date`);
    

    我认为在后一种情况下,您需要将这些列声明为 NOT NULL。

    【讨论】:

    • @littleK 我有两个字段我想设置一个作为主键,另一个作为自动增量是否可能?
    • 如果第一个主键是自增的,你不能删除它。您提供的第二种解决方案不起作用。
    【解决方案2】:

    将您当前的主键改为唯一键:

    ALTER TABLE table DROP PRIMARY KEY, ADD UNIQUE KEY(username,date);
    

    此后自动增量将正常运行,没有任何问题。您还应该在 auto_increment 字段上放置一个唯一键,以用于您的行处理:

    ALTER TABLE table ADD UNIQUE KEY(id);
    

    【讨论】:

    • 我尝试这样做,但仍然收到错误:#1075 - 表定义不正确;只能有一个自动列,并且必须定义为一个键
    【解决方案3】:

    使用类似的东西:

    CREATE TABLE users (
      id INT PRIMARY KEY AUTO_INCREMENT,
      user VARCHAR(32) NOT NULL,
      thedate DATE NOT NULL,
      UNIQUE(user,thedate)
    );
    

    如果您已经拥有该表,并且只想在其上添加唯一约束 用户+日期,运行

    ALTER TABLE users  ADD UNIQUE KEY user_date_idx (user,  thedate);
    

    【讨论】:

      【解决方案4】:

      我知道这是个老问题,这就是我解决问题的方法 -

      ALTER TABLE `student_info` ADD `sn` INT(3) UNIQUE NOT NULL AUTO_INCREMENT FIRST         
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-04
        • 2012-01-31
        • 1970-01-01
        • 2016-03-07
        • 2011-04-26
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多