2012-01-09 3 views
1

это первый раз для меня с триггерами в MySQL.Триггер с «NEW» не работает

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

CREATE TRIGGER inserisciemail
ПОСЛЕ ВСТАВИТЬ на users для каждой строки
НАЧАТЬ
INSERT INTO Prova (provaemail)
ЗНАЧЕНИЯ (NEW.email);
END

результатов поля 'provaemail' пустые и заполняются только поле идентификатора (autoincremented). Что случилось?

Vito

+0

он должен работать. Можете ли вы поделиться своими табличными схемами и инструкцией INSERT для таблицы «users»? Вы уверены, что 'users'''email' не пуст? – Abhay

+0

ОК, проблема в символе @. Если я использую другое «простое» поле, оно идет нормально ... argh! – Vito

+0

@ символ? Я не думаю, что это должно быть проблемой. В чем проблема? Вы видите ошибки? – Abhay

ответ

1

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

Итак, спасибо за SQL, но я боюсь, что они не включили CREATE TABLE для «prova» и оператора INSERT, работающего в таблице «users».

В любом случае, я создал таблицу «users» и триггер в моей среде dev. Затем я создал свою собственную версию «Prova» таблицы, как показано ниже:

CREATE TABLE `prova` (
`provaemail` VARCHAR(40) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Затем побежал ниже оператора вставки:

INSERT INTO `users` (`id`, `email`) VALUES (1, '[email protected]'); 

И новый элемент был вставлен в «Prova», здесь:

mysql> select * from prova; 
+----------------------+ 
| provaemail   | 
+----------------------+ 
| [email protected] | 
+----------------------+ 
1 row in set (0.00 sec) 

Так что срабатывал триггер!

Было бы здорово, если бы вы могли поделиться схемой для «prova» и вашего запроса INSERT INTO users, чтобы мы могли продолжить исследование. Я уверен, что что-то не так.

EDIT 1

Спасибо за вставки. Они отлично работали, а таблица «prova» имеет следующие данные:

mysql> select * from prova; 
+-----------------------+ 
| provaemail   | 
+-----------------------+ 
| [email protected] | 
| [email protected]  | 
| [email protected]  | 
| [email protected]  | 
| [email protected] | 
| [email protected]  | 
| [email protected]  | 
+-----------------------+ 
8 rows in set (0.00 sec) 

Так что ничего странного до сих пор! Почему бы вам не попробовать эти шаги, когда на вашем конце:

  1. создать «пользователи» таблицы
  2. создать триггер
  3. создать «Prova» таблицы (с помощью оператора CREATE я дал выше)
  4. огонь вставки, как указано на http://pastie.org/3166828
  5. сделать SELECT * FROM prova;

И дайте мне знать, что вы видите?

+0

Спасибо за интерес. Здесь заявление вставки http://pastie.org/3166828 – Vito

+0

см. РЕДАКТИРОВАНИЕ 1 в ответе – Abhay

+0

Спасибо, я тоже попробовал. Все в порядке. Проблема в том, что только когда новая строка создается SQLAlchemy (+ Plone) ... argh! – Vito

Смежные вопросы