Как добавить уникальный ключ к существующей таблице (с непересекающимися строками)
Я хочу добавить сложный уникальный ключ к существующей таблице. Ключ содержит от 4 полей (user_id
, game_id
, date
, time
).
Но в таблице есть не уникальные строки.
Я понимаю, что могу удалить все повторяющиеся даты и после этого добавить сложный ключ.
Возможно, существует другое решение без поиска всех дубликатов данных. (например, добавить уникальный игнорировать и т. д.).
UPD Я искал, как можно удалить дубликаты строк mysql - я думаю, что это хорошее решение. удалить дубликаты, используя только запрос MySQL?
7 ответов:
Вы можете сделать так, как советовал янтарь
ALTER TABLE TABLE_NAME ADD Id INT IDENTITY(1,1) PRIMARY KEY
Или
Вы можете добавить ограничение
Но я думаю, чтобы не потерять существующие данные, вы можете добавить столбец indentity, а затем сделать составной ключ.ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time)
Мне пришлось решать аналогичную задачу. Я унаследовал большую исходную таблицу от MS Access с почти 15000 записями, которые не имели первичного ключа, который я должен был нормализовать и сделать CakePHP совместимым. Одно из соглашений CakePHP состоит в том, что каждая таблица имеет первичный ключ, что это первый столбец и что он называется "id". Следующее простое утверждение сделало трюк для меня под MySQL 5.5:
ALTER TABLE `database_name`.`table_name` ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (`id`);
Это добавило новый столбец ' id ' типа integer перед существующими данными ("FIRST" ключевое слово). Ключевое слово AUTO_INCREMENT увеличивает идентификаторы, начиная с 1. Теперь каждый набор данных имеет уникальный числовой идентификатор. (Без оператора AUTO_INCREMENT все строки заполняются id = 0).
Я предоставляю свое решение с предположением о вашей бизнес-логике. В основном в моем дизайне я позволю таблице хранить только одну запись для комбинации пользователь-игра. Поэтому я добавлю составной ключ к таблице.
PRIMARY KEY (`user_id`,`game_id`)
Либо создайте идентификатор автоинкремента, либо уникальный идентификатор и добавьте его к естественному ключу, о котором вы говорите, с помощью 4 полей. это сделает каждую строку в таблице уникальной...