Я использую 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?
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
Других решений пока нет …