0
点赞
收藏
分享

微信扫一扫

前任程序员留下的坑!!!!

尤克乔乔 2023-05-05 阅读 66


前任程序员留下的坑!!!!

系统维护中遇到一个bug,给学员分配课时,显示分配成功,但是课时确未到账。当遇到问题的时候,首先去查日志,发现sql语句执行成功了。但是课时就是未到账!又去看代码,发现代码并没有什么问题。这个问题纠结了好久!今天无意中去看数据库字段,发现该课时字段的值默认为NULL,于是想到是不是NULL在作祟。于是自己去测试这个问题

语言:PHP

框架:TP5

数据库:MYSQL

SQL语句:原生SQL(有待进一步验证,框架提供的更新数据SQL会不会出现此问题)

表结构如下图:

前任程序员留下的坑!!!!_SQL


前任程序员留下的坑!!!!_SQL_02


代码:

前任程序员留下的坑!!!!_数据库_03


打印结果显示为int(0)说明,SQL语句没有执行成功,再去数表里查证是否id为1的num变为2

如下图:

前任程序员留下的坑!!!!_MYSQL_04


结果发现id为1的num值并没有变成2还是为空,如下图

前任程序员留下的坑!!!!_字段_05


此时,重新设计该表,将num值设置为不为空,默认为0,再去验证。

前任程序员留下的坑!!!!_字段_06


前任程序员留下的坑!!!!_MYSQL_07


再去执行刚才的代码,打印结果显示为int(1),且数据表里id为1的num字段值也变成了2,如下图:

前任程序员留下的坑!!!!_SQL_08


前任程序员留下的坑!!!!_字段_09


说明:当字段设计为NULL的时候,第一次进行UPDATE数据更新(进行加法运算)时,数据会出现问题,凡是数据字段为int的类型,且经常变动,最好将该字段的值设置为非空默认为0 。(有待进一步验证)但是当我要把数据表的字段改为非空默认为0的时候,又报了一个错误。

前任程序员留下的坑!!!!_MYSQL_10


这个错误是 当你需要变更表字段为必填非空,此时表中有一条数据且此字段为空,造成冲突引起的。需要先将表中该字段的默认为NULL的值全部改成0,即可。


举报

相关推荐

0 条评论