Error: [sql] Couldn't insert SQL accounting START record - Can't update table 'useraccounting' in stored function/trigger because it is already used by statement which invoked this stored function/trigger
Мы часто получаем вышеуказанную ошибку после аутентификации пользователя, и пользователю требуется более 1 минуты, чтобы появиться в онлайн-таблице.Любая идея о причине и решениях?
Спасибо
Обновление: ниже используемого триггера:
CREATE DEFINER=`mysql`@`%` TRIGGER `radacct_after_update` AFTER UPDATE ON `radacct` FOR EACH ROW BEGIN
if (NEW.acctoutputoctets != OLD.acctoutputoctets)
THEN
UPDATE useraccounting SET tmpQuta = tmpQuta + (New.acctoutputoctets - OLD.acctoutputoctets)
WHERE EXISTS (SELECT * FROM users WHERE users.userable_id = useraccounting.client_id AND users.userable_type = 'App\\Models\\Client' AND (users.username = New.username));
END IF;
END
ОБНОВЛЕНИЕ2: мы создали 2 триггера.Один на INSERT и другой на UPDATE.
После INSERT на radacct:
BEGIN
UPDATE useraccounting SET tmpQuta = New.acctoutputoctets
WHERE EXISTS (SELECT * FROM users WHERE users.userable_id = useraccounting.client_id AND users.userable_type = 'App\\Models\\Client' AND (users.username = New.username));
END
после UPDATE на radacct:
BEGIN
if (NEW.acctoutputoctets != OLD.acctoutputoctets)
THEN
UPDATE useraccounting SET tmpQuta = tmpQuta + (New.acctoutputoctets - OLD.acctoutputoctets)
WHERE EXISTS (SELECT * FROM users WHERE users.userable_id = useraccounting.client_id AND users.userable_type = 'App\\Models\\Client' AND (users.username = New.username));
END IF;
END