在mysql中使用触发器完整示例

好久没有写一篇原创博客了,之前一直转载各种文章,最近朋友网站遇到一个问题,就是时间戳不一致,导入内容入库时间和显示的发表时间不一致,在没找到模板内部原因之前,我打算用触发器来保证数据的一致性,呵呵,这算是我工作的小背景吧。进入正题,我先在一个很小的数据库上做实验,毕竟好久没接触触发器、存储过程之类的东西了,心里没底,废话不多说了,先给大家看这个截图:

在mysql中使用触发器完整示例_第1张图片

注意到,这里的属性列之间的比较用的是表名student,比如student.stuAge1、student.stuAge2,后面的update一句中也是直接用表名+属性列名,插入数据之后的截图我就不展示了,会提示'unknown table student in field list',具体原因我也不太清楚为什么,google了一下没找到合理的解释,然后我就没管,继续换用其他的方法。触发器中有两个关键词需要注意:new和old,在插入之前不能使用old,因为此时没有旧值,同样在删除之后不能使用new,因为没有新值,显然同时能使用的情况只有update了,这里不多说了,直接贴上修改触发器之后的截图:

在mysql中使用触发器完整示例_第2张图片

这样,在添加新数据之后,比如stuAge1和stuAge2的值就保持一致了,效果如下:

在mysql中使用触发器完整示例_第3张图片

如id为3和4所示,原来的插入值分别是(15,11)和(111,222),经过触发器的处理,就变成了上面的效果!!

这里需要注意触发器编写上的一些细节,我这里是用"|"作为结束符的,虽然上面截图中没有显示,但是需要加delimiter |;

还有,如果已经存在该名称的触发器,需要先drop trigger trigger_name;

最后,贴出查看数据库中触发器的代码:select * from information_schema.TRIGGERS;

小弟才疏学浅,接触触发器不多,上面只是做个记录供自己以后参考,如果有什么问题,还请不吝赐教!谢谢~

你可能感兴趣的:(数据库相关)