В соответствии с вашим запросом на титул, следующий скрипт создаст папку с именем после каждого *.png
в каталоге, а затем переместит соответствующий файл во вновь созданный файл.
Пакет:
for %%i in (*.png) do (mkdir "%%~ni" && move %%i %%~ni)
Командная строка:
for %i in (*.png) do (mkdir "%~ni" && move %i %~ni)
Ваши команды противоречат.
Если files.file_id
определено UNIQUE
(или PRIMARY KEY
), вам не нужно LIMIT 1
. И вам вообще не нужна явная блокировка. Просто запустите UPDATE
, поскольку во всей транзакции затрагивается только одна строка, тупиковая ситуация невозможна. (Если нет побочных эффектов от триггеров или правил или задействованных функций.)
Если files.file_id
не UNIQUE
(как кажется), то UPDATE
может влиять на несколько строк в произвольном порядке и только один из них заблокирован, рецепт для тупиков. Тогда более неотложная проблема заключается в том, что запрос не выполняет то, с чего вы, похоже, хотите начать.
Лучшее решение зависит от недостающей информации. Это будет работать:
UPDATE files
SET ...
WHERE primary_key_column = (
SELECT primary_key_column
FROM files
WHERE file_id = 123
LIMIT 1
-- FOR UPDATE SKIP LOCKED
);
Нет BEGIN;
и COMMIT;
, необходимых для одной команды, в то время как автоматическая фиксация по умолчанию включена.
Возможно, вы захотите добавить FOR UPDATE SKIP LOCKED
(или FOR UPDATE NOWAIT
) , чтобы пропустить или сообщить об ошибке, если строка уже заблокирована.
И вы, вероятно, захотите добавить предложение WHERE
, которое позволит избежать повторной обработки одной и той же строки.
Подробнее здесь: