2011-11-29 102 views
0

我有一个通过网页更新的MySQL表。某些列被格式化为整数。如果您尝试输入“”,“”或任何不能自动舍入为整数的字符串,将会出现mysql错误。我不希望编辑我的PHP来处理这些更正,而是希望在此表上创建一个BEFORE UPDATE触发器,该字段值将字段值设置为零,如果它是不正确的整数值。在另一个堆栈溢出帖子中,我发现你可以使用ceil(field) = field来测试整数值。下面是创建触发器语法:MYSQL触发器更正条目

delimiter| 
create trigger before_folding_update before update on daily_folding_report 
for each row 
begin 
if ceil(new.jobnum) != new.jobnum then 
    set new.jobnum = 0; 
end if; 
end| 

如果我把做的事:

update daily_folding_report set jobnum = 'a' 

我仍然得到错误:Incorrect integer value: 'a' for column 'jobnum' at row 1.没有任何人知道我能做到这一点?

回答

1

据我所知,所有的值检查都是在触发器之前完成的。你为什么不在你的PHP代码中这样做?

+0

只是一个小实验。我经常有多个程序访问同一个表。我总是喜欢更强大的解决方案。是的,如果这种触发方法是不可能的,我会毫无疑问地改变我的PHP代码。 –

+0

那么,MySQL会希望'new.jobnum'在它启动触发器之前是一个整数,以避免触发器发疯,因为它拥有它不应该有的东西。 –

+0

是的,我看到你在说什么,但是我已经做了一个触发器,如果​​没有在插入查询中给出一个主键,那么它将给出一个主键的值。这是当我有一个特殊的主键字段不是自动递增的。 –