MySQL Trigger не запускается? - PullRequest
0 голосов
/ 02 марта 2012

Так что должен быть довольно простым триггером, но мой MySQL не очень хорош, так что это, несомненно, сбой с моей стороны.
Он вообще не обновляет таблицу статистики, даже еслидолжно быть;

DROP TRIGGER countryUpdate;

DELIMITER //

CREATE TRIGGER countryUpdate AFTER INSERT ON stats
FOR EACH ROW BEGIN
    DECLARE NewIP varchar(16);
    DECLARE NewCountry varchar(80);
    SET NewIP = inet_aton(new.vis_ip);
    SET NewCountry = (SELECT country FROM iptocountry WHERE lower_bound <= NewIP AND upper_bound >= NewIP)
    UPDATE stats
        SET Country = NewCountry

END //

DELIMITER;

1 Ответ

3 голосов
/ 02 марта 2012

Ну, во-первых, ваш UPDATE - если он вообще работает - меняет все строки в таблице stats, и делает это для каждой вставленной строки. Это действительно не имеет особого смысла. Как минимум, вы хотите добавить предложение where, чтобы попадать только в одну строку, которую вы только что вставили.

Очевидно, что это не может работать вообще в MySQL, потому что "хранимая функция или триггер не может изменить таблицу, которая уже используется (для чтения или записи) оператором, который вызвал функцию или триггер. " (см.« Ограничения для хранимых функций »)

Итак, вместо этого вам нужно использовать триггер перед вставкой и сделать SET new.country = NewCountry, чтобы исправить строку до того, как она будет вставлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...