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
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 ;
AUTO_INCREMENT
with UNIQUE_KEY
property.ALTER TABLE 'brand_keywords' CHANGE COLUMN 'comment_id' 'comment_id' INT(5) NOT NULL AUTO_INCREMENT UNIQUE;
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.
As of MySQL 5.5, it seems to be possible without an index or primary key an INT field to be provided with autoincrement.