Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL触发器以更正条目_Mysql_Triggers_Integer - Fatal编程技术网

MYSQL触发器以更正条目

MYSQL触发器以更正条目,mysql,triggers,integer,Mysql,Triggers,Integer,我有一个通过网页更新的mysql表。某些列的格式为整数。如果您尝试输入“”,或任何无法自动舍入为整数的字符串,将出现mysql错误。我不想编辑PHP来处理这些更正,而是想在更新此表之前触发一个触发器,如果字段值是不正确的整数值,则将其设置为零。在另一篇堆栈溢出文章中,我发现可以使用ceil(field)=field测试整数值。以下是创建触发器语法: delimiter| create trigger before_folding_update before update on daily_fol

我有一个通过网页更新的mysql表。某些列的格式为整数。如果您尝试输入“”,或任何无法自动舍入为整数的字符串,将出现mysql错误。我不想编辑PHP来处理这些更正,而是想在更新此表之前触发一个触发器,如果字段值是不正确的整数值,则将其设置为零。在另一篇堆栈溢出文章中,我发现可以使用
ceil(field)=field
测试整数值。以下是创建触发器语法:

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'

我仍然收到错误:
第1行“jobnum”列的整数值不正确:“a”。
其他人知道我如何完成此操作吗?

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

只是一个小实验。我经常有多个程序访问同一个表。我总是喜欢更健壮的解决方案。是的,如果这个触发器方法不可行,我会毫无疑问地修改我的PHP代码。好吧,MySQL会期望
new.jobnum
在它启动触发器之前是一个整数,以避免触发器变得疯狂,因为它有一些不应该有的东西。是的,我明白你的意思,但是,我以前做过一个触发器,如果在insert查询中没有给出主键,它将为主键提供一个值。这是因为我有一个特殊的主键字段不是自动递增的。True,但区别在于
auto_increment
是在插入时执行的,而触发器是在插入之前执行的。这将允许您更改它。MySQL中处理事件的顺序类似于
查询解释->类型检查->触发器(之前)->处理特殊键,如自动增量->更新->触发器(之后)->完成