Мне нужно auto_increment поле в MySQL, которое не является первичным ключом - PullRequest
26 голосов
/ 20 июля 2009

Прямо сейчас у меня есть таблица, первичным ключом которой является поле auto_increment. Однако мне нужно установить первичный ключ как username, date (чтобы гарантировать, что не может быть повторяющегося имени пользователя с датой).

Мне нужно поле auto_increment, однако, чтобы внести изменения в информацию о строках (добавление и удаление).

Что обычно делается в этой ситуации?

Спасибо!

Ответы [ 4 ]

19 голосов
/ 20 июля 2009

Просто установите уникальный индекс для составного из (имя пользователя, дата).

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

В качестве альтернативы, вы можете попробовать

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

и я думаю, что в последнем случае эти столбцы должны быть объявлены как NOT NULL.

2 голосов
/ 03 июля 2017

Я знаю, что это старый вопрос, вот как я решил проблему -

ALTER TABLE `student_info` ADD `sn` INT(3) UNIQUE NOT NULL AUTO_INCREMENT FIRST         
1 голос
/ 20 июля 2009

Используйте что-то вроде:

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);
1 голос
/ 20 июля 2009

Вместо этого измените текущий первичный ключ на уникальный:

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

После этого auto_increment будет работать нормально без каких-либо проблем. Вам также следует поместить уникальный ключ в поле auto_increment, чтобы использовать его для обработки строк:

ALTER TABLE table ADD UNIQUE KEY(id);
...