文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

这篇文章主要介绍了如何解决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: 0

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)

 

执行语句二

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: 0

mysql> 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;

只将第一个字段变更为1

mysql> 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: 0

mysql> 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) 其余情况所得值为 NULL

mysql> 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连接字段的问题”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯