Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511

Insert or update нескольких записей разом

24.08.2018, 18:32. Показов 6655. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Я выполняю тысячами такие запросы:
MySQL
1
INSERT INTO table(v1,v2,v3,v4,v5,v6) VALUES(1,2,3,4,5,6) ON CONFLICT(v1,v2,v3) DO UPDATE SET v4=table.v4+4, v5=table.v5+5, v6=table.v6+6;
То есть если первые 3 значения уже есть в базе, то обновить, если нет - добавить.
Но таких наборов из 6 значений которые нужно обновить/добавить у меня тысячи. Может быть есть способ отдать их базе на съедение все сразу или пачками по несколько?
Спасибо!

Добавлено через 1 минуту
Имею ввиду, одним запросом, так как сам запрос формируется языком программирования Java
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2018, 18:32
Ответы с готовыми решениями:

Как организовать журналирование insert / update / delete для нескольких таблиц?
Используется MySQL - 5.7 - х64 Имеется несколько таблиц с приблизительно следующим кол. и типам полей. Количество полей и...

INSERT нескольких записей
Здравствуйте. Нужно написать код который будет создавать сразу несколько записей в таблице. Например, выбираю раздел, новости, новости...

Update нескольких записей
как задать запрос чтобы в нем можно было менять записи с разными запросами, ну вот к примеру есть UPDATE table SET a=1 WHERE id=10 ...

3
31 / 26 / 26
Регистрация: 04.04.2018
Сообщений: 83
30.08.2018, 11:36
Вам нужно все запросы реализовать в рамках одной транзакции. Транзакция выполняется по принципу все-или-ничего, т. е. или все запросы в транзакции выполняются целиком, либо не выполняется ни один запрос.
Для того, чтобы в Postgresql объединить запросы в одну транзакцию, необходимо окружить их операторами BEGIN и COMMIT:
T-SQL
1
2
3
4
BEGIN;
INSERT INTO table(v1,v2,v3,v4,v5,v6) VALUES(1,2,3,4,5,6) ON CONFLICT(v1,v2,v3) DO UPDATE SET v4=table.v4+4, v5=table.v5+5, v6=table.v6+6;
...
COMMIT;
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
04.09.2018, 09:03
zuxa-zuxa, я делаю немного по-другому, у меня версия староватая и ON CONFLICT не работает
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
DECLARE 
     _r record;
     
BEGIN
 
FOR _r IN (
SELECT tdto.address AS address_in_base, _in_data.address_from_function FROM (
 SELECT 
    unnest(string_to_array('AAA;BBB;FFF;SSS', ';') AS address_from_function
) AS _in_data
 LEFT JOIN "TestDto" AS tdto ON tdto.address = _in_data.address_from_function
) AS address)
LOOP
     IF _r.address IS NULL THEN
      INSERT INTO "TestDto"(address) 
      VALUES (address);
     ELSE
      UPDATE "TestDto" 
      SET
       address = _r.address_in_base || 'BBB'
     WHERE address = _r.address_in_base;
     END IF;
END LOOP;
 
END;
Можно посылать не портянку в виде '1;2;3;4', а массив - не существенная разница.
Суть в том, что я делаю сначала запрос JOIN и смотрю, по ключу, какие уже есть совпадения - если совпадений нет, то вставляю запись и обновляю, если есть.

Конечно, это самый простой вариант в лоб. Можно ещё думать и сделать сначала выгрузку для UPDATE и вставить скопом и из тех, что не выгрузились, сделать INSERT.
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
08.09.2018, 10:33
Можно так писать

SQL
1
2
3
4
5
INSERT INTO 
TABLE(v1,v2,v3,v4,v5,v6) 
VALUES
(1,2,3,4,5,6), (10,20,30,40,50,60), (100,200,300,400,500,600)
ON CONFLICT(v1,v2,v3) DO UPDATE SET v4=TABLE.v4+4, v5=TABLE.v5+5, v6=TABLE.v6+6;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.09.2018, 10:33
Помогаю со студенческими работами здесь

Обновление у пяти записей разом
Здравствуйте. Есть необходимость выбрать 5 записей из БД по нескольким условиям (Как это делать - знаю: SELECT * FROM table_name ORDER BY...

Добавление нескольких категорий разом
Возьмем к примеру некий продукт, который добавляется в админке, каким образом добавить сразу в две категории этот товар. Ведь у нас в...

Послать приложению нажатие нескольких клавиш разом
Здравствуйте! Скажите, возможно ли используя SendMessage/PostMessage - послать приложению не одну кнопку а сразу несколько, разом? ...

UPDATE + INSERT
Есть ли такой оператор: если есть строка с Primary Key, то UPDATE, если нет, то INSERT?

Insert, update
нужно создать 3 кнопки в borland builder: создать запись, добавить, удалить с помощью insert, update...... кто знает помогите с чего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru