当前位置: 首页 > news >正文

数据库与网站营销型网站建设细节

数据库与网站,营销型网站建设细节,物流网站建设平台分析,东铁匠营网站建设问题描述 最近碰到到一个奇怪的问题#xff0c;update 语句执行没有报错#xff0c;但是没有更新数据#xff0c;具体有问题的语句类似于如下形式#xff1a; update test.stu set cname 0 and math 90 and his 80 where id 100; 复制 原因分析 直观上看#xff…问题描述 最近碰到到一个奇怪的问题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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;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: 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 复制 可以看到这两个语句确实都不会报错且带 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: 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) 复制 从结果来看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 来避免这个问题。
http://www.hkea.cn/news/14288568/

相关文章:

  • 建设部网站安全考核证书查询ktv支付订房网站模板
  • 长沙网站建设营销5网站开发之美
  • 湖寮做网站设计图片logo免费
  • 烟台电子商务产业园网站建设开封旅游网站建设项目方案
  • 最新的域名网站投资公司注册需要多少注册资金
  • 网站开发新动力哈尔滨建设工程网
  • 企业网站访问对象有哪些创业计划书(大学生版)
  • 哈尔滨网站建设培训学校深圳市住房和建设局局长级别
  • 带数据库的网站模板网站建设还好做吗
  • 做推送用什么网站wordpress ftp 密码忘记
  • 我爱做衣服网站建站购物网站
  • 苏州网站建设熊掌号二级域名租用
  • 泉州专业建站淘宝网站做推广收费吗
  • 做简单网站代码seo视频教程
  • html网页制作流程dz论坛seo设置
  • 做网站项目团队口号陕西网站建设企业
  • 如何建设一个自己 的网站首页wordpress 编辑自己代码
  • 炎陵做网站西安网站建设那家好
  • 云浮市住房和城乡建设局网站网站帮企业做推广价格怎么算
  • 什么软件可以做动漫视频网站WordPress动漫源码
  • 小网站推荐自己做的网站网页错位
  • 阜阳市网站建设深度网网站建设
  • wordpress网站如何引流江苏有什么网站找工程建设人员
  • 西安哪家做网站公司好网站建设广告有哪些平台
  • 网站建设与管理以后工作方向被电商代运营骗了怎么办
  • 高端网站开发哪家好wordpress显示时间
  • 网站建设青岛公司简约装修
  • 新网站怎样做外链微信营销网站(含html源文件)免费下载
  • 企业网站提供商建设网站南沙区
  • 装修行业 网站建设济源做网站的好公司