分享更有价值
被信任是一种快乐

如何解决mysql多个字段update时错误使用and连接字段的问题

文章页正文上

这篇文章主要介绍了如何解决mysql多个字段update时错误使用and连接字段的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。执行语句一update spoken set book_id = 2 and unit_id = 14 and article_id = 47409 where id = 284989;结果为只将book_id字段值更新为0,其他字段都没有更改mysql> select id,book_id,unit_id,article_id from spoken;+——–+———+———+————+| id | 免费主机域名book_id | unit_id | article_id |+——–+———+———+————+| 284989 | 5 | 55 | 55555 |+——–+———+———+————+1 row in set (0.00 sec)mysql> update spoken set book_id = 2 and unit_id = 14 and article_id = 47409 where id = 284989;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> select id,book_id,unit_id,article_id from spoken;+——–+———+———+————+| id | book_id | unit_id | article_id |+——–+———+———+————+| 284989 | 0 | 55 | 55555 |+——–+———+———+————+1 row in set (0.00 sec)
执行语句二update spoken set book_id = 2,unit_id = 14,article_id = 47409 where id = 284989;(正常语句)三个字段值都变更为给定值,mysql> select id,book_id,unit_id,article_id from spoken;+——–+———+———+————+| id | book_id | unit_id | article_id |+——–+———+———+————+| 284989 | 0 | 55 | 55555 |+——–+———+———+————+1 row in set (0.00 sec)mysql> update spoken set book_id = 2,unit_id = 14,article_id = 47409 where id = 284989; Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> select id,book_id,unit_id,article_id from spoken;+——–+———+———+————+| id | book_id | unit_id | article_id |+——–+———+———+————+| 284989 | 2 | 14 | 47409 |+——–+———+———+————+1 row in set (0.00 sec)
执行语句三update spoken set book_id = 2 and unit_id = 14 and article_id = 47409 where id = 284989;只将第一个字段变更为1mysql> select id,book_id,unit_id,article_id from spoken;+——–+———+———+————+| id | book_id | unit_id | article_id |+——–+———+———+————+| 284989 | 2 | 14 | 47409 |+——–+———+———+————+1 row in set (0.00 sec)mysql> update spoken set book_id = 2 and unit_id = 14 and article_id = 47409 where id = 284989; Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> select id,book_id,unit_id,article_id from spoken;+——–+———+———+————+| id | book_id | unit_id | article_id |+——–+———+———+————+| 284989 | 1 | 14 | 47409 |+——–+———+———+————+1 row in set (0.00 sec)分析,1、正常的update语法为语句二,更新多个字段的值,多个字段之间使用逗号“,”分隔。2、但问题语句一和问题语句三更新多个字段的值使用and
,分隔多个字段;且语句一将book_id变更为,语句三将book_id变更为1;一、问题语句一update spoken set book_id = 2 and unit_id = 14 and article_id = 47409 where id = 284989;等价于update spoken set book_id =
(2 and unit_id = 14 and article_id = 47409)where id = 284989;等价于update spoken set book_id =
(2 and
(unit_id = 14)and
(article_id = 47409))where id = 284989;相当于将book_id的值更新为下面语句的值select 2 and (unit_id = 14) and (article_id = 47409) from spoken
where id = 284989;该语句由三个表达式通过mysql的逻辑运算符and连接表达式一为: 2表达式二为:unit_id = 14
(select unit_id = 14 from spoken
where id = 284989;)表达式三为:article_id = 47409
(select article_id = 47409 from spoken
where id = 284989;)由于当时unit_id = 55,article_id=55555表达一的值为2表达式二值为0表达式三的值为0所以select 2 and (unit_id = 14) and (article_id = 47409) from spoken
where id = 284989;的值为2 and 0 and 0
即为。即执行语句的结果等价于update spoken set book_id =
0
where id = 284989;Mysql的逻辑运算http://www.cnblogs.com/pzk7788/p/6891299.html逻辑与
( AND 或 && )(1) 当所有操作数均为非零值、并且不为 NULL 时,所得值为 1
(2) 当一个或多个操作数为 0 时,所得值为 0
(3) 其余情况所得值为 NULLmysql> SELECT 1 AND -1, 1 && 0, 0 AND NULL, 1 && NULL ;
+———-+——–+————+———–+
| 1 AND -1
| 1 && 0
| 0 AND NULL | 1 && NULL |
+———-+——–+————+———–+
| 1 | 0 | 0
| NULL |
+———-+——–+————+———–+二、同理可得语句三2 and unit_id = 14 and article_id = 47409相当于将book_id的值更新为下面语句的值select 2 and (unit_id = 免费主机域名14) and (article_id = 47409) from spoken
where id = 284989;该语句由三个表达式通过mysql的逻辑运算符and连接表达式一为: 2表达式二为:unit_id = 14
(select unit_id = 14 from spoken
where id = 284989;)表达式三为:article_id = 47409
(select article_id = 47409 from spoken
where id = 284989;)由于当时unit_id = 14,article_id=47409表达一的值为2表达式二值为1表达式三的值为1所以select 2 and (unit_id = 14) and (article_id = 47409) from spoken
where id = 284989;的值为2 and 1 and 1
即为1。即执行语句的结果等价于update spoken set book_id =
1
where id = 284989;额外的问题:Mysql如果对mysql的数值型如int做匹配时,unit_id字段和14做匹配时如下三个语句都匹配到结果select id,book_id,unit_id,article_id from spoken where unit_id=14;select id,book_id,unit_id,article_id from spoken where unit_id=’14’;select id,book_id,unit_id,article_id from spoken where unit_id=’14aaa’;(字符串转数值会截取第一个非数字前面的数字)mysql> select id,book_id,unit_id,article_id from spoken where unit_id=14;+——–+———+———+————+| id | book_id | unit_id | article_id |+——–+———+———+————+| 284989 | 0 | 14 | 47409 |+——–+———+———+————+1 row in set (0.00 sec)mysql> select id,book_id,unit_id,article_id from spoken where unit_id=’14’;+——–+———+———+————+| id | book_id | unit_id | article_id |+——–+———+———+————+| 284989 | 0 | 14 | 47409 |+——–+———+———+————+1 row in set (0.00 sec)mysql> select id,book_id,unit_id,article_id from spoken where unit_id=’14aaa’;+——–+———+———+————+| id | book_id | unit_id | article_id |+——–+———+———+————+| 284989 | 0 | 14 | 47409 |+——–+———+———+————+1 row in set, 1 warning (0.00 sec)
感谢你能够认真阅读完这篇文章,希望小编分享的“如何解决mysql多个字段update时错误使用and连接字段的问题”这篇文章对大家有帮助,同时也希望大家多多支持云技术,关注云技术行业资讯频道,更多相关知识等着你来学习!

相关推荐: 如何搭建EF环境

这篇文章主要介绍了如何搭建EF环境,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.EF是什么?EF是.net封装的一个用于数据库交互的实体层框架,它的全称是Entity Framework。2…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册