Ошибка 1111: MySQL на триггере от вставки - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь понять, почему этот триггер продолжает выдавать мне ошибку о недопустимом использовании сгруппированной функции, когда я пытаюсь запустить выражение вставки бассейна, чтобы проверить это.

Я пытался работать с этим, чтобы понятьиз того, что я делаю неправильно, но ошибка просто остается той же.Ошибка 1111

DROP TRIGGER a_num;
DELIMITER //
CREATE TRIGGER a_num BEFORE INSERT ON test_a

  FOR EACH ROW BEGIN
DECLARE last INT DEFAULT 0;
INSERT INTO test_b SET full_name = CONCAT_WS(' ', NEW.f_name, NEW.l_name);
SET last = COUNT(id);
UPDATE test_b SET number = CONCAT_WS('-',  last, LEFT(NEW.f_name, 2), LEFT(NEW.f_name, 2)) WHERE id = last;
END;
//

Пожалуйста, не возражайте против использования или плохой конструкции. Я новичок.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Можете ли вы предоставить оператор CREATE для test_a и оператор INSERT, который вы используете?

В MySQL Workbench, если вы щелкнете правой кнопкой мыши на test_a, перейдите в «Копировать в буфер обмена ... Создать оператор», отправит определение таблицы.

Есть ли причина, по которой вы вставляете, а затем обновляете ту же запись? Не могли бы вы объединить это в одну вставку?

0 голосов
/ 29 марта 2012

Я думаю, что это должно быть -

DROP TRIGGER a_num;
DELIMITER //
CREATE TRIGGER a_num BEFORE INSERT ON test_a

FOR EACH ROW BEGIN
    DECLARE last INT DEFAULT 0;
    INSERT INTO test_b SET full_name = CONCAT_WS(' ', NEW.f_name, NEW.l_name);
    SET last = LAST_INSERT_ID();
    UPDATE test_b SET number = CONCAT_WS('-',  last, LEFT(NEW.f_name, 2), LEFT(NEW.f_name, 2)) WHERE id = last;
END;
//
...