заказ транзакции mysql - триггер не работает в Production - PullRequest
0 голосов
/ 15 мая 2018

Я использую 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 генерирует.В чем может быть проблема?

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

1 Ответ

0 голосов
/ 30 мая 2018

Решит ли 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
...