#c# #asp.net #mysql
#c# #asp.net #mysql
Вопрос:
RowID MsgID UserID
1 5 33
2 5 12
3 5 21
4 5 33
5 5 33
У меня есть эта таблица, которую я обновляю в разных частях кода,
Здесь есть три записи для идентификатора пользователя 33 для MsgID 5. Я хочу иметь только одну строку для идентификатора пользователя 33 для идентификатора msgid 5. Как я могу удалить запись для идентификатора пользователя 33, чтобы у меня была только 1 запись для 33.
Я использую MySQL
Комментарии:
1. Прежде всего, если бы вы использовали
unique index
oncolumns(msg, user)
, у вас не было бы этой проблемы сейчас.2. Я имею в виду, что будет еще одна строка с идентификатором MsgID 6 и идентификатором пользователя 33. Итак, как я могу иметь уникальный индекс, для каждого сообщения он создает идентификатор msgid и идентификатор пользователя и вставляет в эту таблицу.
3. Идея заключается в том, что уникальный индекс находится в обоих столбцах одновременно как пара. Это позволит только один (5,33), только один (6,33), только один (a, b) в общей ситуации.
Ответ №1:
Отметьте, вы можете добавить уникальный ключ с ключевым словом IGNORE, например —
ALTER IGNORE TABLE table_name
ADD UNIQUE INDEX UK_table_name (MsgID, UserID);
Он создаст новый уникальный ключ и удалит все дубликаты из таблицы с помощью одной команды.
Дополнительная информация — ИЗМЕНИТЬ синтаксис ТАБЛИЦЫ.
Ответ №2:
Вы могли бы для упрощения создать новую таблицу (переименовать позже) и установить для столбцов значение unique, а затем просто
INSERT IGNORE new_table
SELECT *
FROM old_table
Ответ №3:
Прежде чем вы сделаете «insert» в своем коде, вы должны проверить, есть ли строка с идентификатором пользователя 33 и MsgID 5, и если такая строка есть, вы должны использовать ее вместо вставки новой.
Комментарии:
1. он просит удалить записи, а не использовать то же самое. лучше всего установить ограничение на уникальный ключ..