#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. Это предложение изменяет таблицу, разрешая дублирование идентификаторов и строк поиска — не то, что было запрошено. Лучшим ответом было бы сделать оба столбца уникальными, а не создавать составной ключ.