日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MySQL update set 和 and的區(qū)別

瀏覽:42日期:2023-10-03 13:09:00
問(wèn)題描述

最近接到一個(gè)奇怪的咨詢,update 語(yǔ)句執(zhí)行沒(méi)有報(bào)錯(cuò),但是沒(méi)有更新數(shù)據(jù),具體有問(wèn)題的語(yǔ)句類似于如下形式:

update test.stu set cname = ’0’ and math = 90 and his = 80 where id = 100;原因分析

直觀上看,這個(gè) update 語(yǔ)句的語(yǔ)法是有問(wèn)題的,正常更新多列數(shù)據(jù)的語(yǔ)法應(yīng)該是用逗號(hào),類似于如下形式:

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

直接用 and 第一反應(yīng)其實(shí)是會(huì)報(bào)語(yǔ)法錯(cuò)誤,不太像是能正常執(zhí)行的。那么基于騰訊云數(shù)據(jù)庫(kù) MySQL,實(shí)際構(gòu)造一個(gè)簡(jiǎn)單的場(chǎng)景,嘗試復(fù)現(xiàn)一下這個(gè)問(wèn)題。

SQL 語(yǔ)句如下:

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 語(yǔ)句和使用 and 的 update 語(yǔ)句,看一下實(shí)際的運(yùn)行結(jié)果:

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

可以看到這兩個(gè)語(yǔ)句確實(shí)都不會(huì)報(bào)錯(cuò),且?guī)?and 的 update 語(yǔ)句匹配到了具體的行(Rows matched: 1),但是沒(méi)有修改數(shù)據(jù)(Changed: 0),標(biāo)準(zhǔn)語(yǔ)法下的 update 語(yǔ)句倒是正常修改了數(shù)據(jù)。

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

驗(yàn)證起來(lái)很簡(jiǎn)單,換個(gè) cname 不為 0 的數(shù)據(jù) 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: 0mysql> 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)

從結(jié)果來(lái)看,MySQL 修改 cname 的值為 0,說(shuō)明確實(shí)是當(dāng)成邏輯運(yùn)算符來(lái)處理了,仔細(xì)分析這個(gè)語(yǔ)句,會(huì)發(fā)現(xiàn) MySQL 按照如下方式來(lái)處理:

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

math 和 his 的取值是根據(jù) where 條件篩選的行來(lái)決定的,實(shí)際對(duì)應(yīng)到上面測(cè)試的場(chǎng)景,會(huì)變成如下的邏輯判斷:

’0’ and 97 = 90 and 81 = 80

PS:需要注意,即便是字符型的數(shù)據(jù) 0,也會(huì)被當(dāng)做 False。

解決方案

目前并不能通過(guò) sql_mode 或者其他參數(shù)的形式來(lái)阻止這種帶 and 的 update 語(yǔ)句,因此這一類問(wèn)題的隱蔽性比較強(qiáng)。建議在開(kāi)發(fā)的時(shí)候,利用封裝好的框架,或者加強(qiáng)代碼或者 SQL review 來(lái)避免這個(gè)問(wèn)題。

PS:騰訊云數(shù)據(jù)庫(kù) MySQL 也會(huì)有類似的問(wèn)題,需要警惕。

以上就是MySQL update set 和 and的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于MySQL update set 和 and的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩一区二区三区四区在线观看 | 亚洲精品视频一二三区| 日韩中文在线电影| 国产精品99一区二区三| 视频在线在亚洲| 综合一区av| 日韩精品欧美精品| 日韩av电影一区| 国产精品毛片aⅴ一区二区三区| 免费在线观看一区二区三区| 亚洲综合专区| 91精品国产自产观看在线| 7m精品国产导航在线| 国产欧美一级| 国产suv精品一区二区四区视频| 国内精品伊人| 成人精品中文字幕| 91久久亚洲| 亚洲精品福利| 国产精品大片| 成人av三级| 最新亚洲激情| 久久国产精品免费精品3p| 精品美女视频| 日韩高清成人| 国产亚洲亚洲| 欧美日韩午夜电影网| 美女尤物国产一区| 97人人精品| 国产亚洲一级| 国产探花一区二区| 国产在线观看www| 99国产一区| 久久国产尿小便嘘嘘| 欧美日韩免费观看视频| 99在线精品免费视频九九视| 蜜桃av一区二区| 国产伦精品一区二区三区视频 | 国产手机视频一区二区| 日韩精品成人在线观看| 久久精品97| 精品国产一区二| 蜜桃国内精品久久久久软件9| 欧美综合二区| 久久精品超碰| 久久久久国产| 久久精品97| 精品捆绑调教一区二区三区| 亚洲综合欧美| 精品国产乱码久久久久久1区2匹| 国产韩日影视精品| 欧美日韩夜夜| 精品在线99| 国产精品亚洲二区| av亚洲免费| 免费日韩成人| 亚洲一区二区三区无吗| av最新在线| 日本在线视频一区二区| 久久免费国产| 日韩av电影一区| 亚洲成人一区| 日本v片在线高清不卡在线观看| 麻豆中文一区二区| 水野朝阳av一区二区三区| 国产欧美日韩在线观看视频| 亚洲韩日在线| 麻豆精品久久久| 亚洲中字黄色| 久久久精品国产**网站| 天堂成人免费av电影一区| 激情不卡一区二区三区视频在线| 中文字幕中文字幕精品| 丝袜美腿一区| 青草综合视频| 午夜精品网站| 精品国产精品国产偷麻豆 | 福利视频一区| 亚洲精品乱码| 色婷婷久久久| 久久不见久久见免费视频7| 久久国产精品久久w女人spa| 精品视频免费| 日本成人在线一区| 不卡av一区二区| 美女av在线免费看| 国产精品网站在线看| 日本免费一区二区三区四区| 日韩精品久久久久久| 亚洲性视频h| 另类专区亚洲| 国产精品22p| 日本亚洲不卡| 你懂的亚洲视频| 日韩av资源网| 蜜臀久久99精品久久久久宅男| 电影天堂国产精品| 久久久亚洲欧洲日产| 日本不卡一区二区三区| 视频一区视频二区中文| 五月天激情综合网| 亚洲h色精品| 日韩国产欧美一区二区| 美女视频一区在线观看| 91亚洲精品在看在线观看高清| 精品1区2区3区4区| 久久久久久久久99精品大| 中文在线а√在线8| 久久精品三级| 麻豆精品99| 久久一区视频| 麻豆国产精品一区二区三区| 国产日韩欧美| 日本va欧美va欧美va精品| 首页欧美精品中文字幕| 久久国产精品久久w女人spa| 亚洲一区二区动漫| 在线亚洲观看| 91久久久久| 伊人久久婷婷| 亚洲黄页一区| 免费不卡在线视频| 午夜电影一区| 日韩高清在线一区| 日韩va欧美va亚洲va久久| 欧美天堂在线| 欧美国产先锋| 久久精品天堂| 神马久久午夜| 欧美日韩一区二区三区四区在线观看| 91久久精品无嫩草影院| 国产精品自在| 久久影院一区二区三区| 麻豆视频在线看| 欧美男人天堂| 亚洲h色精品| 亚洲一区二区三区高清| 免费在线观看成人| 日韩av中文在线观看| 国产精品白丝一区二区三区| 麻豆中文一区二区| 中文字幕在线免费观看视频| 免费看av不卡| 欧洲激情综合| 亚洲免费专区| 国产精品一区毛片| 高清一区二区| 在线视频观看日韩| 久久亚洲色图| 日韩高清欧美激情| 麻豆精品视频在线| 少妇精品导航| 人人爽香蕉精品| 高清av一区| 亚洲成人一区| 欧美一级一区| 国产成人精选| 亚洲在线成人| 国产激情一区| 久久精品国产大片免费观看| 亚洲一区av| 久久亚洲黄色| 午夜av一区| 国产亚洲高清在线观看| 国产精品99一区二区三区| 亚洲国产一区二区三区在线播放| 日韩免费精品| 日韩免费高清| 人人爽香蕉精品| 老司机精品视频在线播放| 久久婷婷丁香| 日韩在线观看中文字幕| 国产成人精选| 爽好多水快深点欧美视频| 美腿丝袜亚洲一区| 欧美日韩国产高清| 国产三级一区| 91精品精品| 亚洲人成精品久久久| 青青草精品视频| 三级精品视频| 日韩区一区二| 色天使综合视频| 日韩欧美四区| 神马日本精品| 国产欧美日韩在线一区二区 | 欧美日韩精品一本二本三本| 欧美一级一区| 2023国产精品久久久精品双| 国产精品亚洲综合色区韩国| 欧美 日韩 国产一区二区在线视频 | 国产精品网站在线看| 免费观看不卡av| 久久a爱视频| 亚洲一区二区日韩| 麻豆视频在线看| 日本视频一区二区| 亚洲午夜精品久久久久久app| 国产精品一区高清| 日韩精品一级|