Иметь первичный ключ, а также автоматически увеличивающееся поле

#mysql #primary-key

#mysql #primary-key

Вопрос:

У меня есть таблица с четырьмя столбцами, ( id , searchstring , count , timestamp ).
Я хочу иметь возможность использовать ON DUPLICATE KEY UPDATE функцию для обновления количества searchstring при вводе дубликата.

Однако searchstring должна быть первичным ключом, чтобы иметь возможность это делать, и мой идентификатор автоматически устанавливается на мой первичный ключ, потому что он автоматически увеличивается.
Есть ли какой-либо способ обойти это?

Ответ №1:

Да, установите первичный ключ так, чтобы он включал как идентификатор, так и строку поиска

 CREATE TABLE  `test`.`new table` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `searchstring` varchar(45) NOT NULL,
  `count` int(10) unsigned NOT NULL,
  `timest` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`searchstring`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  

Вы можете изменить существующую таблицу с помощью:

 ALTER TABLE `test`.`new table` DROP PRIMARY KEY,
 ADD PRIMARY KEY  USING BTREE(`id`)
 ADD UNIQUE INDEX ss(searchstring);
  

Комментарии:

1. как вы собираетесь это сделать, не создавая новую таблицу?

2. Это предложение изменяет таблицу, разрешая дублирование идентификаторов и строк поиска — не то, что было запрошено. Лучшим ответом было бы сделать оба столбца уникальными, а не создавать составной ключ.