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

面试官灵魂拷问[二]:SQL 语句中 where 条件后写上 1=1 是什么意思?

面试官灵魂拷问系列又来更新啦!

“SQL 语句中 where 条件后写上 1=1 是什么意思?”
在这里插入图片描述
这玩意就跟很多新语言支持尾部逗号的原理一样的。

比如 Kotlin 支持数组写成 [1, 2, 3, 4, ] ,注意4后边那个逗号,为什么呢?因为当你增加一个项目的时候一定就是项目加上逗号。这样可以使得每个项目都等价。

你再回想一下这样的 C 代码:

enum some_constant {
   ENUMCONST1,
   ENUMCONST2,
   ENUMCONST3,
   ENUMCONST4,
   ENUMCONST5
};

如果我们需要在后边增加一个 ENUMCONST6 常量,那么得修改两行:5后边加个逗号,然后新加一行没有逗号的行。

这种修改方式会给 svn / git 的版本管理带来极大的困惑:如果另外一个同事又加了 ENUMCONST7 常量呢?他们两个人其实都只是增加了一行代码,本来可以自动归并。但实际上对于 svn/git 来说修改了两行,而修改的两行还存在冲突,不能自动归并(新增的6跟7都是尾部没有逗号的,合并了也编译不过)。于是这就属于是平添烦恼。

有的项目为了解决这种烦恼,强制在enum末尾定义一个永远不用的常量,这样此常量之上增加的常量就永远可以有逗号了。

而这种烦恼的产生,个人认为,它就来源于语言设计本身的缺陷,你不允许每一个常数项等价。自然给版本管理带来了麻烦。

SQL语句固化为 where 1=1 之后,每个附加的条件都是 and 开头,这样,每个附加条件都等价了。

select * from my_table where 1=1
and id=2
and name=3
and img_url=4
order by createtime desc
;

你看上边,如果where绑定1=1,后边的每一个条件,都固定是 and 开头的格式,这样增加与删除条件时,都不会影响其他行,对版本管理记录变更来说非常清晰。单独注释任意一行都很方便

以上代码甚至不涉及SQL注入。只影响程序员自己写代码的版本管理,以及增删注释。

所以在这里,使用 1=1 的合理场合只有一个:就是将 where 与 1=1 紧密的贴在一起。如果 where 后边不是紧密贴上一个 1=1 作为固化形式,那么你加 1=1 是没有意义的。

重复一遍:并不是 where 后边添加 1=1,而是将 where 1=1 作为一个整体绑定到一起,中间不能添加任何其他东西。

最后给大家推荐一款好用免费SQL工具:SQL Studio。
(1)免费。(谁不喜欢白嫖呢?)

(2)免费的基础上支持几乎所有主流数据库,不仅有MySQL、Oracel、PostgresSQL等国外数据库,还支持武汉达梦、人大金仓等国产数据库。
在这里插入图片描述
(3)突出亮点:Web版工具——一次部署,团队成员都能使用,占用的硬件资源都在服务器上;只要有可登录的软件链接和账号、密码,任意设备随时可用这款工具:省去了繁琐的工具安装配置、升级过程。(对于团队协作和教学场景简直不要太友好)
在这里插入图片描述
(4)亮点延伸:用户管理——SQL Studio只有管理员可以新建账号、也只有管理员‬可以‬增加‬和‬删除‬数据源‬,这样避免了许多安全问题。
在这里插入图片描述
(5)性能稳定且可圈可点:

a.可视化管理——支持图形化界面对数据库、表进行管理;支持直接修改表结构、表数据等,还能显示操作对应的SQL语句。
在这里插入图片描述
b.写sql支持智能提示:可以根据用户输入的字符及其语意提示表名等信息。
在这里插入图片描述
c.每次执行的SQL语句都会保存在主界面的“历史查询”中,而且找到对应语句可以直接复用。

d.经常需要用到的SQL语句也可以直接保存在主界面“保存的查询”中,不用再从电脑本地导入,而且能直接修改、复制、删除。
在这里插入图片描述
e.除了“历史查询”、“保存的查询”还有“历史导出”功能,每一次下载数据都会被记录,保证了工具完整的审计功能。

f.超强的数据导入、导出能力:近700万行数据导出只需20多秒,比Navicat还快两倍。

g.稳定性好:展开数据库中一万张表,丝毫不卡顿。SQL编辑框支持注释,有注释也能很好地执行语句,不出bug稳定性强。

h.一键批量执行:单击执行编辑框内所有SQL语句,方便大家进行刷库等操作。
在这里插入图片描述
i.一键解释执行:单击即可帮助大家分析sql语句的性能,辅助优化。
在这里插入图片描述
j.结果栏支持调整每页展示多少条数据、且支持改变排序和全屏,看数据更方便。

k.数据库列表、结果栏、历史查询、保存查询都支持搜索定位。


http://www.kler.cn/a/5578.html

相关文章:

  • 数据中台从centos升级为国产操作系统后,资源增加字段时,提交报500错误
  • python+reportlab创建PDF文件
  • Text组件的用法
  • 活着就好20241225
  • 企业数字化转型加速,现代 IT 如何用 Datadog 全面提升可观测性?
  • 有没有检测吸烟的软件 ai视频检测分析厂区抽烟报警#Python
  • 02_Python 学习基础
  • 【算法】Raft算法详解
  • C++ 20 list容器
  • SpringBoot+vue的图书管理系统
  • Java中字节流的相关内容
  • markdown
  • 【linux】基于阻塞队列的生产者消费者模型(条件变量)
  • springboot项目中, 序列化对象需要注意什么?
  • 基于springboot实现结合疫情情况的婚恋系统演示【附项目源码】
  • php mysql网络考试系统dzkf8994
  • Raft协议详解
  • DFS+记忆化剪枝--[NOIP2017 普及组] 棋盘
  • 启动Hadoop报错【Error: JAVA_HOME is not set and could not be found.】
  • JUnit5用户手册~并行执行
  • 全栈声明式可观测:KubeVela 开箱即用且灵活定制的云原生应用洞察
  • 蓝桥杯嵌入式--实战模拟题
  • vue获取数据的两种方式实践+简单骨架屏实现
  • 《花雕学AI》05:令人惊奇的ChatGPT,一个能够与人类对话的人工智能
  • [Java] synchronized的锁优化机制
  • Java 8 - Lambda 表达式