Mysql Innodb: Autoincrement non-Primary Key

后端 未结 3 890
栀梦
栀梦 2020-11-30 09:20

Is it possible to auto-increment a non-Primary Key?

Table \"book_comments\"

book_id     medium_int
timestamp   medium_int
user_id     medium_int
vote         


        
相关标签:
3条回答
  • 2020-11-30 10:00

    You've existing table. If you already gave a primary key to comment_id and the only purpose is to set auto_increment. You can drop the primary key to that column. MySQL allows a column with any key property can access auto_increment. So better try an index or unique key to comment_id like below.

    1.Remove Primary Key

    ALTER TABLE `book_comments` MODIFY `comment_id` INT(5) NOT NULL;
    
    ALTER TABLE `book_comments` DROP PRIMARY KEY ;
    
    1. Add AUTO_INCREMENT with UNIQUE_KEY property.

    ALTER TABLE 'brand_keywords' CHANGE COLUMN 'comment_id' 'comment_id' INT(5) NOT NULL AUTO_INCREMENT UNIQUE;

    0 讨论(0)
  • 2020-11-30 10:13

    Yes you can. You just need to make that column be an index.

    CREATE TABLE `test` (
      `testID` int(11) NOT NULL,
      `string` varchar(45) DEFAULT NULL,
      `testInc` int(11) NOT NULL AUTO_INCREMENT,
      PRIMARY KEY (`testID`),
      KEY `testInc` (`testInc`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
    
    
    insert into test(
      testID,
     string
    )
    values (
    1,
        'Hello'
    );
    
    
    insert into test( 
    testID,
     string
    )
    values (
    2,
        'world'
    );
    

    Will insert rows with auto-incrementing values for 'testInc'. However this is a really dumb thing to do.

    You already said the right way to do it:

    "Make the comment_id PK and enforce integrity through a unique index on book_id, timestamp, user_id."

    That's exactly the way that you should be doing it. Not only does it provide you with a proper primary key key for the table which you will need for future queries, it also satisfies the principle of least astonishment.

    0 讨论(0)
  • 2020-11-30 10:25

    As of MySQL 5.5, it seems to be possible without an index or primary key an INT field to be provided with autoincrement.

    0 讨论(0)
提交回复
热议问题