mysql使用中,Mysql 使用中的一些坑(一)

以下是本人使用中遇到的一些坑,会陆陆续续收集更新,主要目的是希望能帮助到有缘人了,文笔不高,大白话介绍手把手解决问题。如有问题或想法请指出,不胜感激!!!

1.在创建字段的时候避免使用mysql中一些关键字比如primary字段来创建主键

先看下我的mysql版本

56719d997488

版本5.6.22

随便找了一个表测试

56719d997488

嗯?怎么会有问题呢,它提示‘primary = 1’这附近有问题。 这修改语句有什么问题?类型不匹配?也不对啊primary是int类型的而我传的值也正是int类型了!嗯?开始怀疑人生,有点摸不着头脑……

之后我又随便测试了一下结果如下

56719d997488

此时我不使用primary来作为修改条件,竟然能修改成功什么情况?最后借助了百度

在查到了一个帖子后我清楚了是关键字的缘故。

此时再次尝试更新如下

56719d997488

结论:避免使用系统相关的关键字,以免造成不必要的影响,如本例的更新失败。另外5.7 8.0等版本暂时未测试,有机会补充上

2.推荐不要使用enum枚举数值类型,推荐使用tinyint类型来代替,如果非要使用enum最好不要使用数值

场景

就是做一个简单的修改操作,其中修改的字段值中包含枚举值,但是修改的结果不报错,Row matched:1 Changed:0 Warinigs:0这种情况前提条件我使用的MYSQL版本是5.6.22版本!!!

表的结构

56719d997488

表的结构

创建表的sql语句

56719d997488

sql语句

添加一条测试数据

56719d997488

测试数据

好的目前表的结构很简单现在我来执行修改操作

56719d997488

命令行修改

很简单一个修改语句 匹配到了也修改成功了

56719d997488

修成功后的值

接下来下面落实到程序了.以下是golang的代码片段

56719d997488

流程就是把刚才上一步修改的数据状态2修改成状态3,可以看到,程序并没有报错,执行了通过了但是RowsAffected结果看到,影响了0条,说明数据没有修改成功,查看库中的记录的确也没有修改成功。

那么问题来了底是哪里错了呢?

把程序中的sql语句也拷贝了出来在命令行执行是成功的,但是在代码中执行却是错的,非常的诡异。起初我怀疑过数据库编码问题,也怀疑过驱动问题,做了各种各样的怀疑和排除,唯独没有考录到程序中处理sql语句替换值的问题。

兜兜转转,最后我浪费了大半天的时间终于发现了问题,原因是我使用的state变量是int类型,我这里应该是使用字符串类型,如下:

56719d997488

RowsAffected为1了,再查看数据库数据也成功修改了。至于失败的原因就是数据类型不匹配,另外mysql5.8 8.0版本不知道会不会有显示提示错误信息,以后有机会测一下,挖个坑。

总结:当sql语句执行的时候,发现执行结果中match到了结果>=1,但是Changed=0,就说明以下两点情况:

1.想要修改的值和修改的值一致时。

2.修改的值和数据库设定的值不匹配也会出现此状态(本例子就是此状态)

另外,最重要的多练多看了,细心很重要了,这种低级错误往往是最致命的,程序出现这种隐式错误而且不好排查,更重要的是浪费时间啊!!!

相关文章

未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值