Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Можно ли на SQL добавлять несколько записей в одном запросе

Автор: VladGull
Дата сообщения: 24.07.2003 09:49
Проблема такая, в программе на Delphi использую базу формата paradox. В программе накапливаются данные (для повышения скорости обработки, программа-RealTime), затем по достижении определенного количества должен сбросить данные на диск.
Причем, принципиально работаю только с SQL- запросами (не знаю еще на какой базе в конце остановлюсь).

Так вот,
можно ли добавлять в одном запросе
insert into table
(field1,filed2 ...., fileldN)
values (N1,N2, ...., NN)
Несколько записей

Пробовал в таком виде:
insert into table
(field1,filed2 ...., fileldN)
values (N1,N2, ...., NN),
values (N1,N2, ...., NN),
values (N1,N2, ...., NN)
Не понимает 4 строку.

Если так нельзя, то как можно?
Естественно, вариант на добавление
100 записей по одиночке не очень подходит из-за скорости выполнения.
Автор: redp
Дата сообщения: 24.07.2003 09:56
кхм, стандарт SQL такого не предусматривает
вот тока непонятно мне зачем если тебе нужна скорость ты вообще SQL юзаешь ? по крайней мере для paradoxа есть куча либ позволяющих тебе на D работать с базой без всяких таких SQL запросов - производительность вырастет раза в три точно
Автор: Bloody_Nokia_Adept
Дата сообщения: 24.07.2003 10:01
VladGull

Цитата:
использую базу формата paradox

Не знаю как paradox, но ни MS SQL, ни Oracle такого синтаксиса не понимают - это не ANSI SQL. В MySQL такой синтаксис будет принят, т.к. там существует такая конструкция, но опять же она нестандартная.
Если уж так горит, то используй bulk операции - SQLBulkOperations в ODBC и Recordset UpdateBatch в ADO. За BDE не знаю, говорить не буду.
Автор: vserd
Дата сообщения: 24.07.2003 10:41
В Interbase:
Insert Into Table (field1,filed2 ...., fileldN) Select field1,filed2 ...., fileldN From Table2 where (Fieldz = xxxx) (или вобще без Where)
Автор: redp
Дата сообщения: 24.07.2003 10:50
2vserd:
дык це bulk copy (вроде так звать) из одной таблицы в другую. А тут человеку надо максимально быстро вставлять данные к-рых в базе исчо нету - чуешь розницу ?
Автор: IntenT
Дата сообщения: 24.07.2003 15:24
INSERT INTO `tbl_stats`
(`id`, `source_id`, `option_id`, `currency_id`, `date`, `datemodified`, `value`, `quantity`, `priority`, `addid`, `active`)
VALUES
(348, 0, 4, 6, '2003-07-08 00:00:00', 20030709175959, '0.1638', 1, 3, 1, 1),
(347, 0, 5, 6, '2003-07-08 00:00:00', 20030709175959, '0.1725', 1, 3, 1, 1),
(642, 0, 4, 12, '2003-07-14 00:00:00', 20030714124307, '75.0012', 100, 3, 1, 1),
(673, 0, 3, 6, '2003-07-10 00:00:00', 20030716102147, '0.1715', 1, 3, 0, 1),
(674, 0, 5, 6, '2003-07-10 00:00:00', 20030716102147, '0.1725', 1, 3, 0, 1),
(675, 0, 4, 6, '2003-07-10 00:00:00', 20030716102147, '0.1675', 1, 3, 0, 1);

Реальный дамп реальной базы. Вообще-то там записей 600, но я укоротил, для примера и так сгодится

Добавлено
Хотя тут уточнение - это Мускул
Автор: Bloody_Nokia_Adept
Дата сообщения: 24.07.2003 15:38

IntenT

Цитата:
Хотя тут уточнение - это Мускул

Боец!
Ты вообще-то хоть читал о какой СУБД речь идет? А что было выше мной про MySQL написано тоже читал? И что толку с твоего поста?
Автор: ironwit
Дата сообщения: 24.07.2003 16:55
VladGull

Цитата:
В программе накапливаются данные (для повышения скорости обработки, программа-RealTime)


а ты мог бы хранить эти данные в kbmmemtable? Если да, тогда тебе получится insert делать одним запросом
Автор: Bloody_Nokia_Adept
Дата сообщения: 24.07.2003 17:01

ironwit

Цитата:
kbmmemtable?

Что это за зверь такой? Расскажи, plz.
Автор: ironwit
Дата сообщения: 24.07.2003 17:20
Bloody_Nokia_Adept

Цитата:
Что это за зверь такой? Расскажи, plz.

в общих чертах. Это обычный ttable - только полностью хранится в памяти(что сказывается на быстроходности). Поддерживает все возможности ttable - вот урл http://www.components4programmers.com/products/kbmmemtable/download/kbmmemtb314.zip
Автор: Bloody_Nokia_Adept
Дата сообщения: 24.07.2003 17:37
ironwit
Thnx

Добавлено
VladGull
Только дочитался

Цитата:
в программе на Delphi использую базу формата paradox


Цитата:
для повышения скорости обработки, программа-RealTime

А как это? С каких пор на MS Windows (ОС с вытесняющей многозадачностью, т.е. не реального времени) стало возможным написание RealTime приложений? Тем более работающих с СУБД, которые de facto не RealTime.
Чё т нестыковочка получается...
Автор: vserd
Дата сообщения: 24.07.2003 17:45
А у него реал тайм, тогда без буферов не обойдешся.
Из источника данных писать во временные файлы, а уж из этих файлов писать в базу.
IMHO по другому не получится.
Автор: ironwit
Дата сообщения: 24.07.2003 17:52
vserd
вот я и говорю. Хранить инфу в memtable - и потом один запросом сбрасывать. Насколько легче(сам так делаю) - но ждем VladGull. Что он скажет?
Автор: drbond
Дата сообщения: 28.07.2003 06:58
При указанном объёме записей (100 - мелочь) введение промежуточной - буферной таблицы практически никак не скажется на скорости функционирования программы использующей БД (даже BDE). Так что не надо париться и делай так - вводи промежуточную таблицу (любым методом, даже виртуальную - в памяти), пиши в неё, затем одним запросом добавляй записи в основную БД. Желательно при этом использовать механизм транзакций во избежание потери данных. Затем после переброски записей - удаляешь записи в буферной таблице и накапливаешь новый буфер. и.т.д.

Страницы: 1

Предыдущая тема: Intel C++ Compiler


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.