2015-10-22 3 views
1

У меня есть следующий триггер:Код ошибки: 1442. Невозможно обновить таблицу «студентов» в хранимой функции/триггера

CREATE [email protected] TRIGGER after_insert_student after INSERT ON 
students FOR EACH ROW BEGIN 
    SET @NEWID := NEW.ID ; 
if @NEWID IS NOT NULL THEN  
    INSERT INTO students SET ID = @NEWID; 
else 
    INSERT INTO students SET ID = 001; 
END IF 
END 

ОШИБКА:

Error Code: 1442. Can't update table 'students' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

ответ

0

Вы не можете изменить таблицу в то время как Триггер INSERT срабатывает. INSERT может сделать некоторую блокировку, которая может привести к тупиковой ситуации. Кроме того, обновление таблицы из триггера приведет к тому, что один и тот же триггер снова начнет работать в бесконечном рекурсивном цикле. Обе эти причины объясняют, почему MySQL не позволяет вам это делать.

Чтобы сделать это, пожалуйста, ссылку this link

0

Вы, вероятно, хотите перед срабатыванием ВСТАВИТЬ. Затем вместо обновления таблицы просто назначьте требуемое значение NEW.ID.

0

Проблема заключается в том, что вы не можете написать заявление, как

INSERT INTO students SET ID = @NEWID; 

, потому что он требует, чтобы знать, какие столбцы вы хотите вставить, или, если не указаны столбцы затем вставить во всех столбцах значения и т.д.

INSERT INTO students values (@NEWID); 

должен работать или если вы хотите придерживаться своего SET ID затем попытаться написать что-то вроде

UPDATE students SET ID = @NEWID; 

Надеюсь, это поможет вам решить вашу проблему.

0

Решение: сделать это перед обновлением ПО триггера, и использовать новый оператор, он будет делать свою работу, - как все, что вы хотите, если новый идентификатор NULL набор его 001:

CREATE [email protected] TRIGGER after_insert_student 
BEFORE INSERT ON students 
FOR EACH ROW BEGIN 
    IF NEW.ID IS NULL THEN  
     SET ID = 001; 
    END IF; 
END; 

Причина: Вы не можете обновить таблицу (студентов), где вызывается триггер:

Within a stored function or trigger, it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.

Doing так будет генерировать Ошибка 1442:

Error Code: 1442 
Can't update table 'chatroompost' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 
Смежные вопросы