mysql

mysql float类型转换问题

最近在做一个项目的时候,因为要写一些mysql的存储过程,在对存储过程进行调试时,发现在删除数据库表的记录时,一直找不到这条记录,但是查询又可以查询到,很是诡异,特记录下,请看代码:

1
delete from order_log where user_id = 20 and cost = 399.00 and status = 1;

字段cost是float(10,2)类型,本来是一个很简单的sql语句,但是一直就是没法删除这条数据,特别奇怪,后来在stackoverflow上看到了答案,遇到float类型的数据,一定要这样写:

1
delete from order_log where user_id = 20 and (cost -399.00) < 0.001 and status = 1;

这样才真正执行这条删除语句。

mysql 存储过程、触发器原则

从mysql 5.0开始,就支持存储过程和触发器,很多大厂也都是使用mysql关系型数据库,mysql是市场占有率很高的一款数据库产品。因此,我们在开发应用的时候,除了通过程序来实现业务场景之外,还可以通过存储过程和触发器直接操作数据库,实现业务逻辑。这也是代码之外的另一种解决方案。
但是,在实际应用当中,存储过程和触发器不是越多越好,也是需要根据业务逻辑、技术栈选型来决定。一般原则是尽量不用触发器,因为触发器是行级遍历,会对每一条记录都进行遍历操作。使用太多,会导致数据库性能下降。数据多时严重影响性能。因此,建议能不用触发器就不用。而存储过程则没有太多限制。

mysql procedure调试工具:Debugging MySQL

这次项目是做分销系统,除了两级分销之外,还要进行代理商的分佣操作,代理商分为五个等级。业务逻辑比较复杂,因此,用到很多的存储过程,且存储过程代码很多。而在mysql上,目前还没有一个好的调试存储过程的工具,刚开始,有人给我推荐了这个:dbForge Studio for MySQL ,产品好是好,就是要收费,且不便宜。但我的电脑上确安装不上,一直报错,于是卸载了,重新再找了一款:Debugging MySQL,也是收费的,但有14天的试用时间,足够拿来测试用了。avatar,挺不错的一款调试软件,推荐大家使用。