Мне пришлось использовать и поддерживать старую схему базы данных для игровых серверов ...
Действительно плохой. Каждый столбец с данными, которые могли иметь нечисловой символ в нем, хранился как текст.
Я преобразовал каждый столбец в соответствующий тип данных, но теперь у меня возникла проблема с настройкой первичного индекса.
Должна быть id
, запись, содержащая уникальную идентификационную строку конкретного пользователя. (это варчар).
Из-за предыдущего отсутствия индексации и невинной ошибки, которую невозможно решить из-за наших многочисленных игровых серверов (у нас их было много, и в прошлом их было много), мы имеем несколько повторяющихся строк и, следовательно, не можем установить столбец в качестве основного индекса.Удалить дубликаты строк в моем конкретном случае?
У меня очень мало опыта работы с MySQL или SQL в целом. Я не знаю, как написать запрос для удаления дубликатов.
Одна из наших таблиц состоит из двух столбцов: id
и lst
(varchar). Для этого дубликаты имеют полностью идентичные строки из-за отсутствия ограничений в запросе обновления.
Другой немного сложнее. Он имеет ту же колонку id
, и довольно много. Однако есть три вопроса: id
, cur
(int) и mdl
(varchar). Правило дублирования поиска здесь немного сложнее. Во-первых, в зависимости от того, что имеет значение mdl
, отличное от определенного значения (пусть оно будет «default.mdl», например), скорее всего, будет последней информацией. Во-вторых, тот, который имеет наибольшее значение cur
, скорее всего, будет правильным.
Исходя из этого, мне нужно сохранить последнюю (скорее всего, правильную) строку в каждой (не обеих) двух таблицах за каждые id
.
Как это сделать только с SQL?
Редактировать: Причина, по которой я не делаю этого вручную, состоит в том, что каждая таблица имеет ~ 186 000 строк, и я считаю, что строки 1/20 (~ 9000) являются дубликатами.
Есть ли столбцы, которые являются идентификаторами строк? Обычно называется столбец. «id» будет уникальным, но вы говорите, что для данного идентификатора есть повторяющиеся строки. Если нет, то как различать строки «дублировать» (для ключевых столбцов)? – Bohemian
Я могу взять удар в темноте и утверждать, что строки имеют уникальный идентификатор, указываю ли я один или нет. Должна быть внутренней особенностью MySQL. Я не уверен, может ли этот внутренний уникальный идентификатор использоваться в SQL или нет. – Vercas