Проще говоря: у меня есть таблица с двумя столбцами: одно имя пользователя, а другое - псевдоним. У меня есть другая таблица, где у меня есть 2 столбца: один - это имя пользователя, а другое - countNicknames.
Я хочу, чтобы countNicknames содержало количество псевдонимов, которые имеет каждый пользователь (и всякий раз, когда я вставляю новый псевдоним в таблицу1, значение под таблицей2.countNicknames будет автоматически обновляться.
Не могли бы вы написать, как построить вторую таблицу для ссылки на первую?
Почему бы просто не подсчитать, когда вам нужно значение?
Я хочу, чтобы 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 - значения вычисляются по требованию, вместо того, чтобы устанавливать триггеры.
Подробнее информация о просмотрах см. в документации.
Ну, предложение @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 индексированные представления (или некоторые эквивалентные)? по-видимому, нет - так что не обращайте внимание на этот вариант....