заказ транзакции mysql — триггер не работает в Production

Я использую PHP для вставки в базу данных MYSQL. Существует триггер ДО ВСТАВКИ НА table1. Затем я вставляю данные BULK в таблицу MYSQL2. Запрос на вставку для table2 находится внутри PHP цикла while. Вот порядок транзакции и триггера:

START TRANSACTION

INSERT INTO TABLE1 <-TRIGGER below

while(INSERT INTO TABLE2) // Comment: One INSERT per row

COMMIT

————- ТРИГГЕР НЕ РАБОТАЕТ ——————

delimiter $$

CREATE
TRIGGER `sample`.`new_gm_sequence`
BEFORE INSERT ON `sample`.`frtgoodsmovement`
FOR EACH ROW
begin
declare wno     varchar(20);

select concat(numberprefix, cast(slno+1 as char)) into wno
from   frtnumbercontrol
where  codetype     = 'GMTY'
and    code         = new.gmtype
and    new.gmdate between frdate and todate;

set new.gmno = wno;

update frtnumbercontrol set slno = slno+1
where  codetype     = 'GMTY'
and    code         = new.gmtype
and    new.gmdate between frdate and todate;

end
$$

gmno в приведенном выше триггере поле, которое будет автоматически создано в таблице 1 (frtgoodsmovement). Это не работает в производстве, но работает в непроизводстве. Результаты поля для table2 идут в другой таблице.

Вот скриншот:https://imgur.com/a/7zHXH45

Во время ручного ввода данных GM No генерирует. В чем может быть проблема?

Примечание: для создания INSERT из 100 записей требуется около 1 секунды. Должен ли я сделать это быстрее? Тогда триггер будет работать с PHP BULK INSERT?

1

Решение

MySql Lock Table решит эту проблему?
https://dev.mysql.com/doc/refman/5.5/en/lock-tables.html

LOCK TABLES
tbl_name [[AS] alias] lock_type
[, tbl_name [[AS] alias] lock_type] ...

lock_type:
READ [LOCAL]
| [LOW_PRIORITY] WRITE

UNLOCK TABLES
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]