亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > MySQL update set 和 and的區別

MySQL update set 和 and的區別

熱門標簽:武漢電銷機器人電話 催天下外呼系統 html地圖標注并導航 南太平洋地圖標注 400電話變更申請 呂梁外呼系統 400電話辦理服務價格最實惠 大豐地圖標注app 北京金倫外呼系統

問題描述

最近接到一個奇怪的咨詢,update 語句執行沒有報錯,但是沒有更新數據,具體有問題的語句類似于如下形式:

update test.stu set cname = '0' and math = 90 and his = 80 where id = 100;

原因分析

直觀上看,這個 update 語句的語法是有問題的,正常更新多列數據的語法應該是用逗號,類似于如下形式:

update test.stu set cname = '0',math = 90,his = 80 where id = 100;

直接用 and 第一反應其實是會報語法錯誤,不太像是能正常執行的。那么基于騰訊云數據庫 MySQL,實際構造一個簡單的場景,嘗試復現一下這個問題。

SQL 語句如下:

CREATE TABLE `stu` (
  `id` int(11) NOT NULL,
  `sname` varchar(16) NOT NULL,
  `cname` varchar(8) DEFAULT NULL,
  `math` int(11) NOT NULL,
  `eng` int(11) DEFAULT NULL,
  `his` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

insert into stu values(100,'sam','0',90,88,83);
insert into stu values(101,'jhon','1',97,82,81);
insert into stu values(102,'mary','2',87,89,92);
insert into stu values(103,'adam','2',87,89,92);

然后分別試一試正常的 update 語句和使用 and 的 update 語句,看一下實際的運行結果:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update test.stu set cname = '0' and math = 90 and his = 80 where id = 100;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> select * from stu;
+-----+-------+-------+------+------+------+
| id  | sname | cname | math | eng  | his  |
+-----+-------+-------+------+------+------+
| 100 | sam   | 0     |   90 |   88 |   83 |
| 101 | jhon  | 1     |   97 |   82 |   81 |
| 102 | mary  | 2     |   87 |   89 |   92 |
| 103 | adam  | 2     |   87 |   89 |   92 |
+-----+-------+-------+------+------+------+
4 rows in set (0.00 sec)

mysql> update test.stu set cname = '0',math = 90,his = 80 where id = 100;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from stu;
+-----+-------+-------+------+------+------+
| id  | sname | cname | math | eng  | his  |
+-----+-------+-------+------+------+------+
| 100 | sam   | 0     |   90 |   88 |   80 |
| 101 | jhon  | 1     |   97 |   82 |   81 |
| 102 | mary  | 2     |   87 |   89 |   92 |
| 103 | adam  | 2     |   87 |   89 |   92 |
+-----+-------+-------+------+------+------+
4 rows in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.01 sec)

mysql>

可以看到這兩個語句確實都不會報錯,且帶 and 的 update 語句匹配到了具體的行(Rows matched: 1),但是沒有修改數據(Changed: 0),標準語法下的 update 語句倒是正常修改了數據。

由此可見,MySQL 在語法上,并不認為 and 這個用法是錯誤的,那么說明 MySQL 用另外的方式“解讀”了這個語句。最容易想到的,就是 MySQL 是不是在 set 的時候,把 and 解釋成了邏輯運算符,而不是英文意義上的“和”?而且 cname 的取值本來就是 0,也符合數據庫處理 bool 數據時的行為(用 0 和 1 代替 False 和 True)。

驗證起來很簡單,換個 cname 不為 0 的數據 update 一下就可以了:

mysql> select * from stu;
+-----+-------+-------+------+------+------+
| id  | sname | cname | math | eng  | his  |
+-----+-------+-------+------+------+------+
| 100 | sam   | 0     |   90 |   88 |   83 |
| 101 | jhon  | 1     |   97 |   82 |   81 |
| 102 | mary  | 2     |   87 |   89 |   92 |
| 103 | adam  | 2     |   87 |   89 |   92 |
+-----+-------+-------+------+------+------+
4 rows in set (0.00 sec)

mysql> begin;update test.stu set cname = '0' and math = 90 and his = 80 where id = 101;
Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from stu;
+-----+-------+-------+------+------+------+
| id  | sname | cname | math | eng  | his  |
+-----+-------+-------+------+------+------+
| 100 | sam   | 0     |   90 |   88 |   83 |
| 101 | jhon  | 0     |   97 |   82 |   81 |
| 102 | mary  | 2     |   87 |   89 |   92 |
| 103 | adam  | 2     |   87 |   89 |   92 |
+-----+-------+-------+------+------+------+
4 rows in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

從結果來看,MySQL 修改 cname 的值為 0,說明確實是當成邏輯運算符來處理了,仔細分析這個語句,會發現 MySQL 按照如下方式來處理:

set cname = ('0' and math = 90 and his = 80)

math 和 his 的取值是根據 where 條件篩選的行來決定的,實際對應到上面測試的場景,會變成如下的邏輯判斷:

'0' and 97 = 90 and 81 = 80

PS:需要注意,即便是字符型的數據 0,也會被當做 False。

解決方案

目前并不能通過 sql_mode 或者其他參數的形式來阻止這種帶 and 的 update 語句,因此這一類問題的隱蔽性比較強。建議在開發的時候,利用封裝好的框架,或者加強代碼或者 SQL review 來避免這個問題。

PS:騰訊云數據庫 MySQL 也會有類似的問題,需要警惕。

以上就是MySQL update set 和 and的區別的詳細內容,更多關于MySQL update set 和 and的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 實操MySQL+PostgreSQL批量插入更新insertOrUpdate
  • MySQL UPDATE 語句的非標準實現代碼
  • mysql update case 更新字段值不固定的操作
  • Mysql update多表聯合更新的方法小結
  • mysql事務select for update及數據的一致性處理講解
  • MySQL UPDATE 語句一個“經典”的坑

標簽:龍巖 自貢 麗水 南充 西寧 徐州 迪慶 無錫

巨人網絡通訊聲明:本文標題《MySQL update set 和 and的區別》,本文關鍵詞  MySQL,update,set,和,and,的,區別,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL update set 和 and的區別》相關的同類信息!
  • 本頁收集關于MySQL update set 和 and的區別的相關信息資訊供網民參考!
  • 推薦文章
    成人a大片高清在线观看| 黄视频网站免费看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日韩一级黄色片| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 尤物视频网站在线观看| 中文字幕一区二区三区精彩视频 | 成人高清视频免费观看| 91麻豆精品国产片在线观看| 九九免费精品视频| 四虎论坛| 国产精品免费久久| 国产网站在线| 精品国产一区二区三区精东影业 | 日韩av东京社区男人的天堂| 毛片成人永久免费视频| 免费毛片基地| 亚洲精品久久久中文字| 美女免费毛片| 二级特黄绝大片免费视频大片| 国产伦精品一区二区三区无广告| 黄视频网站在线看| 免费国产在线观看| 国产国语对白一级毛片| 亚欧成人乱码一区二区| 精品视频一区二区三区免费| 国产不卡在线播放| 欧美电影免费| 天天做日日爱| 日韩在线观看视频黄| 国产伦精品一区二区三区在线观看| 亚洲精品中文字幕久久久久久| 国产一区精品| 精品视频免费看| 毛片电影网| 在线观看导航| 青青久在线视频| 欧美大片aaaa一级毛片| 国产伦精品一区二区三区在线观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久久精品免视看国产明星| 日本特黄一级| 国产伦久视频免费观看 视频| 国产伦理精品| 国产高清在线精品一区a| 精品视频免费看| 亚州视频一区二区| 日本伦理片网站| 久久国产精品只做精品| 国产不卡福利| 国产91精品露脸国语对白| 99久久精品国产高清一区二区| 青青青草影院 | 99色视频在线观看| 午夜欧美成人久久久久久| 夜夜操天天爽| 精品国产一区二区三区久 | 精品美女| 九九久久99综合一区二区| 国产成a人片在线观看视频| 精品毛片视频| 亚洲女初尝黑人巨高清在线观看| 成人免费观看的视频黄页| 麻豆网站在线看| 亚飞与亚基在线观看| 久久精品免视看国产成人2021| 999久久66久6只有精品| 精品视频在线看| a级毛片免费观看网站| 色综合久久天天综线观看| 免费一级片在线观看| 香蕉视频久久| 高清一级片| 精品国产香蕉在线播出| 欧美国产日韩一区二区三区| 国产一区精品| 国产成+人+综合+亚洲不卡| 日本免费乱理伦片在线观看2018| 二级片在线观看| 黄视频网站免费看| 尤物视频网站在线观看| 久久99中文字幕| 欧美爱色| 青草国产在线| 一本高清在线| 中文字幕一区二区三区 精品| 黄色免费三级| 黄色福利| 九九精品在线播放| 日本特黄特色aaa大片免费| 国产成a人片在线观看视频| 欧美a级成人淫片免费看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久久国产精品自线拍免费| 欧美a级成人淫片免费看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩字幕在线| 91麻豆爱豆果冻天美星空| 久久精品免视看国产成人2021| 欧美一级视频免费| 久久精品欧美一区二区| 国产极品精频在线观看| 欧美一级视| 欧美激情中文字幕一区二区| 香蕉视频一级| 国产成+人+综合+亚洲不卡| 可以免费看毛片的网站| 午夜在线影院| 日本特黄一级| 麻豆系列 在线视频| 久久精品欧美一区二区| 久久福利影视| 91麻豆精品国产高清在线| 亚飞与亚基在线观看| 国产麻豆精品| 国产网站免费观看| 国产a视频| 国产成人精品影视| 日本乱中文字幕系列| 国产成人啪精品| 中文字幕一区二区三区 精品| 91麻豆国产福利精品| 精品国产一区二区三区久久久狼| 成人免费一级毛片在线播放视频| 色综合久久天天综线观看| 黄视频网站免费看| 精品在线免费播放| 国产一区二区精品在线观看| 午夜久久网| 国产国语在线播放视频| 国产一区精品| 国产国产人免费视频成69堂| 黄视频网站免费| 中文字幕Aⅴ资源网| 91麻豆精品国产综合久久久| 欧美大片aaaa一级毛片| 四虎影视库国产精品一区| 国产一区二区精品久| 午夜在线亚洲| 免费国产在线观看| 成人免费观看的视频黄页| 午夜在线观看视频免费 成人| 日韩免费片| 免费毛片播放| 久久精品人人做人人爽97| 99久久精品国产国产毛片| 日韩欧美一及在线播放| 91麻豆精品国产片在线观看| 一级毛片视频免费| 韩国毛片基地| 91麻豆国产级在线| 九九久久国产精品| 亚欧成人乱码一区二区| 韩国毛片 免费| 美女免费精品视频在线观看| 国产激情一区二区三区| 可以免费看毛片的网站| 欧美a级大片| 99久久精品国产高清一区二区 | 一本高清在线| 香蕉视频三级| 九九免费高清在线观看视频| 天天做人人爱夜夜爽2020| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产一区二区精品尤物| 99久久精品国产麻豆| 国产伦理精品| 一级毛片视频免费| 韩国三级视频在线观看| 韩国毛片免费大片| 国产麻豆精品高清在线播放| 国产成人精品综合久久久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品国产一区二区三区国产馆| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 久久99这里只有精品国产| 四虎久久影院| 成人高清护士在线播放| 亚洲精品影院| 国产亚洲精品aaa大片| 国产成+人+综合+亚洲不卡| 高清一级片| 91麻豆精品国产高清在线| 成人免费观看的视频黄页| 黄视频网站在线看| 精品国产亚洲一区二区三区| 亚洲女人国产香蕉久久精品| 日韩欧美一二三区| 久久国产精品自线拍免费| 天天做日日爱| 二级片在线观看| 久久精品免视看国产成人2021| 999久久久免费精品国产牛牛| 日韩一级黄色| 你懂的在线观看视频| 国产高清视频免费观看| 日本特黄特色aaa大片免费| 国产成人啪精品视频免费软件| 欧美激情一区二区三区在线 | 色综合久久天天综合|