MySql обновляет сразу две таблицы
У меня есть две таблицы, для которых нужны точные значения для целей денормализации.
Здесь запрос.
первая таблица
UPDATE Table_One
SET win = win+1, streak = streak+1, score = score+200
WHERE userid = 1 AND lid = 1 LIMIT 1
вторая таблица
UPDATE Table_Two
SET win = win+1, streak = streak+1, score = score+200
WHERE userid = 1 LIMIT 1
Как вы можете видеть, единственное различие между обеими таблицами - это их имя, а в таблице 2 нет поля lid
В любом случае, чтобы объединить оба обновления только с одним?
Ответы
Ответ 1
Это может быть возможно при обновлении с несколькими таблицами, как описано в документации.
http://dev.mysql.com/doc/refman/5.5/en/update.html
UPDATE Table_One a INNER JOIN Table_Two b ON (a.userid = b.userid)
SET
a.win = a.win+1, a.streak = a.streak+1, a.score = a.score+200,
b.win = b.win+1, b.streak = b.streak+1, b.score = b.score+200
WHERE a.userid = 1 AND a.lid = 1 AND b.userid = 1
Примечание. Multi-table не поддерживает LIMIT, поэтому это может привести к болью в зависимости от деталей.
Сохраненные процедуры или транзакции могут быть более приятным решением.
Ответ 2
Если между Table_One и Table_Two существует отношение один к одному или от одного до большого, это будет работать:
UPDATE Table_One T1, Table_Two T2
SET T1.win = T1.win+1, T1.streak = T1.streak+1, T1.score = T1.score+200,
T2.win = T2.win+1, T2.streak = T2.streak+1, T2.score = T2.score+200
WHERE T1.userid = 1 AND T1.lid = 1 AND T2.userid = T1.userid;
Ответ 3
Theyre два отдельных запроса и поэтому должны рассматриваться как таковые. Извините, однако, если вы обновляете две таблицы с одинаковыми данными, возможно, лучший способ создать базу данных. Не забудьте сохранить свое программирование DRY.
Изменить: следует отменить это; вы можете использовать его для нескольких таблиц, но вы не можете использовать ORDER BY
или LIMIT
.
Ответ 4
Если вы можете присоединиться к таблицам, вы можете создать представление о двух таблицах, а затем обновить это представление. В вашем примере это выглядит как userid.
При создании представления вам необходимо придерживаться следующих рекомендаций.