Взять строку из бд с удалением

  • Автор темы Автор темы Wide
  • Дата начала Дата начала

Wide

Client
Регистрация
04.02.2013
Сообщения
970
Реакции
262
Баллы
63
Есть возможность взять строку из таблицы с результатом и удалением по значению? В одном запросе и кубике. Блокировка на многопотоке в 2 кубика тупит. Например есть в строке некий айди по которому можно удалить строку.

Как я сейчас делаю. Кубиком беру строку, данные добавляю в таблицу xls, там беру айди и по ней удаляю запросом в бд. Это пп какой костыль.
С блокировкой делал сыпались ошибку, уж не помню что было, кажется на много потоке не снималась блокировка и пр.

В общем нужно в одном стандартном кубике взять строку с результатом и удалением по айди. Уверен что можно в одном экшене сделать.
Приложил шаблон чтоб понятна логика была, результаты мне нужны именно в таблицу вложить.

Я хз что только не перепробовал, и рандом который оч тяжёлый и с подсчётом строк и задавал номер, и с блокировкой, и ещё Бог знает что только не пробовал.
 

Вложения

Например такие варианты, сильно не смейтесь...
Screenshot_71.png
 
Админам! Не даёт прикрепить запросы, выбрав соответствующий язык sql. Пришлось скрином кидать.
 
Не надо разбивать запросы в зенке. Делай все в одной транзакции.
Открываешь транзакцию.
Блокируешь таблицу
Получаешь строку
у этой строки получаешь ID , там же в запросе
по ID удаляешь строку
Разблокируешь таблицу
Закрываешь транзакцию.

Это все делается средствами SQL запроса в одном запросе. Конкретного примера не будет, так как не знаю конкретики, но гугл точно знает.
 
Не надо разбивать запросы в зенке. Делай все в одной транзакции.
Открываешь транзакцию.
Блокируешь таблицу
Получаешь строку
у этой строки получаешь ID , там же в запросе
по ID удаляешь строку
Разблокируешь таблицу
Закрываешь транзакцию.

Это все делается средствами SQL запроса в одном запросе. Конкретного примера не будет, так как не знаю конкретики, но гугл точно знает.
Я весь форум, stack, хабры и пр. перегуглил. Зенька в работе с бд я как понял блокируют строку только в одном экшене, пока я пишу в xls и удаляю, другие потоки возьмут сроку. Для конкретики я и приложил шаблон и запросы.
 
Я весь форум, stack, хабры и пр. перегуглил. Зенька в работе с бд я как понял блокируют строку только в одном экшене, пока я пишу в xls и удаляю, другие потоки возьмут сроку. Для конкретики я и приложил шаблон и запросы.
зенка не может блокировать ни какую строку. она только запрос выполняет. блокировку надо делать на стороне БД. это вопрос к реализации SQL запросов.
Если запросы SQL идут ТОЛЬКО из ОДНОЙ программы зеннопостера и нет желания вникать в блокировку таблицы через SQL , то есть костыль, это локер запросов в самой зенке, который позволит выстроить очередь запросов в линейку. но все это надо делать внутри локера, а он возможен только внутри одного кубика С# , то придется въехать как делать запросы на C# . и поверь, тебе лучше разобраться с локом таблицы, средствами SQL :bk:
 
  • Спасибо
Реакции: Wide
Mysql like works queue,
Multiple queries at the same time

SQL:
Развернуть Свернуть Копировать
BEGIN;
SET @v1 = (
SELECT id_table FROM table WHERE process_task = 0 AND date_start IS NULL LIMIT 1 FOR UPDATE);
UPDATE table SET process_task = 1,date_start = now() WHERE id_table = @v1;
Select @v1;
COMMIT;

The query returns the id to work, once obtained and blocked, do. . .

Tables: InnoDB
Mysql: 5.7

Connection String must included: allowuservariables=True

86617
 
Последнее редактирование:

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)