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

Wide

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

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

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

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

Вложения

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
Например такие варианты, сильно не смейтесь...
Screenshot_71.png
 

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
Админам! Не даёт прикрепить запросы, выбрав соответствующий язык sql. Пришлось скрином кидать.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Не надо разбивать запросы в зенке. Делай все в одной транзакции.
Открываешь транзакцию.
Блокируешь таблицу
Получаешь строку
у этой строки получаешь ID , там же в запросе
по ID удаляешь строку
Разблокируешь таблицу
Закрываешь транзакцию.

Это все делается средствами SQL запроса в одном запросе. Конкретного примера не будет, так как не знаю конкретики, но гугл точно знает.
 

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
Не надо разбивать запросы в зенке. Делай все в одной транзакции.
Открываешь транзакцию.
Блокируешь таблицу
Получаешь строку
у этой строки получаешь ID , там же в запросе
по ID удаляешь строку
Разблокируешь таблицу
Закрываешь транзакцию.

Это все делается средствами SQL запроса в одном запросе. Конкретного примера не будет, так как не знаю конкретики, но гугл точно знает.
Я весь форум, stack, хабры и пр. перегуглил. Зенька в работе с бд я как понял блокируют строку только в одном экшене, пока я пишу в xls и удаляю, другие потоки возьмут сроку. Для конкретики я и приложил шаблон и запросы.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Я весь форум, stack, хабры и пр. перегуглил. Зенька в работе с бд я как понял блокируют строку только в одном экшене, пока я пишу в xls и удаляю, другие потоки возьмут сроку. Для конкретики я и приложил шаблон и запросы.
зенка не может блокировать ни какую строку. она только запрос выполняет. блокировку надо делать на стороне БД. это вопрос к реализации SQL запросов.
Если запросы SQL идут ТОЛЬКО из ОДНОЙ программы зеннопостера и нет желания вникать в блокировку таблицы через SQL , то есть костыль, это локер запросов в самой зенке, который позволит выстроить очередь запросов в линейку. но все это надо делать внутри локера, а он возможен только внутри одного кубика С# , то придется въехать как делать запросы на C# . и поверь, тебе лучше разобраться с локом таблицы, средствами SQL :bk:
 
  • Спасибо
Реакции: Wide

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
[Если работаете с MySQL] В этом сообщении есть пример выполнения нескольких запросов в одном экшене с блокировкой на уровне БД.
 
  • Спасибо
Реакции: Wide

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63

legorange

Client
Регистрация
22.04.2020
Сообщения
13
Благодарностей
34
Баллы
13
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
 
Последнее редактирование:

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