SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.08.2015 16:20:45

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Вставить или обновить записи (2 таблицы)

Есть две таблицы с одинаковыми структурами.

В таблице №1 хранятся записи страниц сайта.
В таблице №2 хранятся записи переводов страниц сайта.

В таблицу №2 понадобилось вставить запись с языком по умолчанию из таблицы №1.

Как может выглядеть запрос INSERT что бы перенести записи из таблицы №1 в таблицу №2, или сделать UPDATE в таблице №2, если запись существует?

Неактивен

 

#2 25.08.2015 16:33:00

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Вставить или обновить записи (2 таблицы)

Используйте оператор REPLACE вместо INSERT:
https://dev.mysql.com/doc/refman/5.5/en/replace.html

Неактивен

 

#3 26.08.2015 10:39:27

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Вставить или обновить записи (2 таблицы)

Не совсем это подходит.
Решил немного переделать идею.

Есть две таблицы (№1 - 100 записей, №2 - 20 записей).

Возможно без PHP MySQL-запросом "сливать" записи из данных двух таблиц в таблицу №3 (структура всех таблиц одинаковая) и держать их постоянно в таком актуальном состоянии. Т.е. в таблице №3 должно быть 120 записей.

Неактивен

 

#4 26.08.2015 10:51:53

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Вставить или обновить записи (2 таблицы)

Возможно даже разбить на три запроса:

1. INSERT в №3 (всех еще не существующих таблиц)
2. UPDATE в №3 (всех сущесвующих записей)
3. DELETE в №3 (всех лишних записей)

Неактивен

 

#5 26.08.2015 13:06:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вставить или обновить записи (2 таблицы)

Возможно вам подойдет представление

CREATE VIEW table3 AS SELECT * FROM table1 UNION ALL SELECT * FROM table2;

Неактивен

 

#6 30.08.2015 10:00:52

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Вставить или обновить записи (2 таблицы)

vasya написал:

Возможно вам подойдет представление

CREATE VIEW table3 AS SELECT * FROM table1 UNION ALL SELECT * FROM table2;

Очень полезный материал - спасибо.
И появились вопросы:

1. Создал представление - если изменилась структура данных таблицы - то в представлении она тоже поменяется?
2. Правильно же понимаю достаточно 1 раз выполнить запрос "CREATE VIEW" - и больше его выполнять не нужно, т.е. в SQL-запросах на выборку я уже буду обращатся не к таблицам №1 и №2 а всегда к VIEW-таблице №3.
3. Если используется UNION - то как будет с id-записями?
4. Если делается UPDATE в таблице "VIEW-таблице №3" при изменении записей в таблицах №1 и №2 - будет ли сохранятся данный UPDATE или он будет братся из таблиц №1 и №2.

Отредактированно Slorvengo (30.08.2015 10:05:29)

Неактивен

 

#7 30.08.2015 11:52:31

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Вставить или обновить записи (2 таблицы)

VIEW отдельно не хранится, хранится только запрос, производящий VIEW.

1. да
2. да, но никто не запрещает обращаться и к отдельным таблицам
3. Поведение не будет отличается от стандартного поведения UNION
4. Если VIEW является обновляемым, то UPDATE будет происходить в самих таблицах. Наличие UNION делает VIEW не обновляемым и прямые апдейты к нему запрещены
https://dev.mysql.com/doc/refman/5.5/en … ility.html

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson