Ссылка на внешний ключ в mysql innodb
-
21-09-2019 - |
Вопрос
Проще говоря:У меня есть таблица с 2 столбцами:одно из них - имя пользователя, а другое - псевдоним.У меня есть еще одна таблица, где у меня есть 2 столбца:один из них - username, а другой - countNicknames.
Я хочу, чтобы countNicknames содержал количество псевдонимов, которые есть у каждого пользователя (и всякий раз, когда я вставляю новый псевдоним в table1, значение в table2.countNicknames будет автоматически обновляться.
Не могли бы вы, пожалуйста, записать, как создать вторую таблицу для ссылки на первую?
Решение
Почему бы просто не посчитать, когда вам нужно значение?
Другие советы
Я хочу, чтобы countNicknames содержал количество псевдонимов каждого пользователя (и всякий раз, когда я добавляю новый псевдоним в таблицу table1, значение в table2.countNicknames автоматически обновляется.
По сути, именно это и будет делать представление.
CREATE OR REPLACE VIEW user_nickname_count AS
SELECT t.username,
COUNT(*) 'countNicknames'
FROM TABLE t
GROUP BY t.username
Вид выглядит как стол, так что при необходимости вы можете присоединиться к нему.И единственные накладные расходы заключаются в том, что по сути это просто выполняемый запрос SELECT — значения вычисляются по требованию, а не для настройки триггеров.
Для большего информацию о представлениях смотрите в документации.
Что ж, предложение @Lasse лучше, но ...есть два других другие варианты...
Есть ли у MySQL триггеры?Если это так, то вам следует добавить триггер Insert, Update, Delete в первую таблицу, который обновляет (или вставляет или удаляет по мере необходимости) атрибут CountNickNames второй таблицы каждый раз, когда запись вставляется, обновляется или удаляется из первой таблицы...
Создать триггер NickNameCountTrig в NickNameCountTable Для вставки, обновления, удаления Как Установить nct для обновления CountNickNames = (Выберите Count() Из первой таблицы Где Name = nct.Name) Из nicknamecountable nct Где Name In (Выберите отличное имя из вставленного Объединение Выберите отличное имя из удаленного) -- ----------------------------------------------- Вставить таблицу nicknamecountable (Имя, количество ников) Выберите имя, количество () из первой таблицы ft Где не существует (Выберите * из NICKNAME Count Table Где Name = ft.Name) -------- Это необязательно ----------------------- Удалить nicknamecountable Где количество ников = 0
Есть ли в MySQL индексированные представления (или что-то эквивалентное)?по - видимому , нет - так что не обращайте внимания на этот вариант ....