32

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

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

这种情况一般怎么办?

谢谢!

4

4 回答 4

24

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

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

或者,您可以尝试

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

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

于 2009-07-20T00:45:57.897 回答
7

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

ALTER TABLE `student_info` ADD `sn` INT(3) UNIQUE NOT NULL AUTO_INCREMENT FIRST         
于 2017-07-03T12:32:37.410 回答
4

使用类似的东西:

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

如果您已经拥有该表,并且只想在 user+thedate 上添加唯一约束,请运行

ALTER TABLE users  ADD UNIQUE KEY user_date_idx (user,  thedate);
于 2009-07-20T01:06:06.247 回答
1

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

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

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

ALTER TABLE table ADD UNIQUE KEY(id);
于 2009-07-20T00:49:51.047 回答