如何解决mysql多个字段update时错误运用and连接字段的问题
发布时间:2022-01-10 16:05:27 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要介绍了如何解决mysql多个字段update时错误使用and连接字段的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 执行语句一 update spoken set book_id = 2 and unit_id =
这篇文章主要介绍了如何解决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连接字段的问题”这篇文章对大家有帮助。 (编辑:52站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |