Ссылка на внешний ключ в mysql innodb

0

Проще говоря: у меня есть таблица с двумя столбцами: одно имя пользователя, а другое - псевдоним. У меня есть другая таблица, где у меня есть 2 столбца: один - это имя пользователя, а другое - countNicknames.

Я хочу, чтобы countNicknames содержало количество псевдонимов, которые имеет каждый пользователь (и всякий раз, когда я вставляю новый псевдоним в таблицу1, значение под таблицей2.countNicknames будет автоматически обновляться.

Не могли бы вы написать, как построить вторую таблицу для ссылки на первую?

Теги:
calculated-columns
innodb

3 ответа

5
Лучший ответ

Почему бы просто не подсчитать, когда вам нужно значение?

  • 0
    согласился, гораздо надежнее.
1

Я хочу, чтобы countNicknames содержало количество псевдонимов, которые имеет каждый пользователь (и всякий раз, когда я вставляю новый псевдоним в таблицу1, значение под таблицей2.countNicknames будет автоматически обновляться.

Это действительно то, что будет выглядеть.

CREATE OR REPLACE VIEW user_nickname_count AS
    SELECT t.username,
           COUNT(*) 'countNicknames'
      FROM TABLE t
  GROUP BY t.username

Вид выглядит как таблица, поэтому вы можете присоединиться к ней, если это необходимо. И только накладные расходы - это просто выполнение запроса SELECT - значения вычисляются по требованию, вместо того, чтобы устанавливать триггеры.

Подробнее информация о просмотрах см. в документации.

1

Ну, предложение @Lasse лучше, но... есть еще два других...

  • Есть ли у MySql триггеры? Если это так, то вы должны добавить триггер Insert, Update, Delete в первой таблице, который обновляет (или вставляет или удаляет при необходимости) атрибут countNickNames второй таблицы каждый раз, когда запись вставлена, обновляется или удаляется из первой таблицы..

    Создать триггер NickNameCountTrig в NickNameCountTable Для вставки, обновления, удаления В виде    Обновить nct Set       CountNickNames =            (Выберите Count() From FirstTable             Где Имя = nct.Name)    От NickNameCountTable nct    Где имя в (Выберите выделенное имя из вставленного                   союз                   Выберите Distinct Name From deleted)    - -----------------------------------------------    Вставить NickNameCountTable (Имя, CountNickNames)    Выберите имя, счет() от FirstTable ft    Где не существует         (Выберите * Из NickNameCountTable          Где имя = ft.Name)    - ------ Это необязательно -----------------------    Удалить NickNameCountTable    Где CountNickNames = 0

  • Есть ли в MySql индексированные представления (или некоторые эквивалентные)? по-видимому, нет - так что не обращайте внимание на этот вариант....

  • 0
    MySQL не имеет индексированных / материализованных представлений. Даже тогда представления MySQL не допускают подзапросов внутри них по какой-то странной причине.
  • 0
    ааа, тогда хорошо ... неважно ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню