2014-01-24 5 views
2

Привет У меня есть проблема с триггером MySQL:MySQL триггер, текст между старым и новым

DELIMITER $$ 
CREATE TRIGGER update_forum_admin 
    after UPDATE ON sb_admins 
    FOR EACH ROW BEGIN 

    INSERT INTO `mysql_db`.`trigger_log` (`dato`, `trigger`, `status`) VALUES (NOW(), 'update_forum_admin', OLD.user+"="+NEW.user); 
END$$ 
DELIMITER ; 

Проблема о:

OLD.user+"="+NEW.user 

Результатом этого является только 0, но я хочу попросите его показать старое имя пользователя плюс «=» плюс новое имя пользователя.

Но какое заявление мне нужно для этого?

ответ

1

Вы с помощью + в качестве оператора конкатенации строк, но это нестандартный синтаксис, используемый Microsoft не MySQL, ни в ANSI Стандарт SQL.

MySQL использует функцию CONCAT(). Например:

INSERT INTO `mysql_db`.`trigger_log` (`dato`, `trigger`, `status`) 
    VALUES (NOW(), 'update_forum_admin', CONCAT(OLD.user, '=', NEW.user)); 

ANSI SQL (и большинство других баз данных SQL) использует двойную трубу в качестве оператора строку concatentation:

INSERT INTO `mysql_db`.`trigger_log` (`dato`, `trigger`, `status`) 
    VALUES (NOW(), 'update_forum_admin', OLD.user || '=' || NEW.user); 

Но не пытайтесь повторить это в MySQL, если вы не установите SQL mode до ANSI или PIPES_AS_CONCAT. По умолчанию || в MySQL является синонимом логического OR.

PS: You should use single-quotes for string literals.

0

Вы хотите concatenate эти значения в строку:

CONCAT(OLD.user, "=", NEW.user) 
Смежные вопросы