2012-01-09 86 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