2012-01-09 49 views
1

這是我第一次在MySQL上觸發器。觸發器與「新」不起作用

我有兩個不同的表('用戶'和'prova'),我想在'prova'中插入一個新行,每當'users'表中有新行時。

CREATE TRIGGER inserisciemail
INSERT ON users FOR EACH一行之後
BEGIN
INSERT INTO PROVA(provaemail)
VALUES(NEW.email);
END

字段 'provaemail' 的結果空並且只有id字段被填充(自動增量)。 有什麼問題?

維託

+0

它應該工作。你能分享你的表模式和'用戶'表的INSERT語句嗎?你確定'users'.'email'不是空的嗎? – Abhay 2012-01-09 17:32:32

+0

好的,問題是@符號。如果我使用另一個「簡單」字段,那麼就可以了......呃! – Vito 2012-01-10 13:56:28

+0

@符號?我不認爲這應該是一個問題。它有什麼問題?你有沒有看到任何錯誤? – Abhay 2012-01-10 16:39:09

回答

1

我在這裏把我們的討論,因爲SO建議,以避免在評論擴展討論。

所以,感謝你的SQL,但恐怕他們沒有包含「prova」的CREATE TABLE和在「users」表上運行的INSERT語句。

無論如何,我在我的開發環境中創建了「用戶」表和觸發器。然後,我創建了自己的「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查詢的模式,以便我們可以進一步研究,那將會很棒。我相信有什麼不對勁。

編輯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 2012-01-11 16:07:24

+0

請參考編輯1中的回覆 – Abhay 2012-01-11 16:50:35

+0

謝謝,我也試過了。一切都很好。只有當它由SQLAlchemy(+ Plone)創建的新行時出現問題...... argh! – Vito 2012-01-12 08:55:12