投稿指南
一、来稿必须是作者独立取得的原创性学术研究成果,来稿的文字复制比(相似度或重复率)必须低于用稿标准,引用部分文字的要在参考文献中注明;署名和作者单位无误,未曾以任何形式用任何文种在国内外公开发表过;未一稿多投。 二、来稿除文中特别加以标注和致谢之外,不侵犯任何版权或损害第三方的任何其他权利。如果20天后未收到本刊的录用通知,可自行处理(双方另有约定的除外)。 三、来稿经审阅通过,编辑部会将修改意见反馈给您,您应在收到通知7天内提交修改稿。作者享有引用和复制该文的权利及著作权法的其它权利。 四、一般来说,4500字(电脑WORD统计,图表另计)以下的文章,不能说清问题,很难保证学术质量,本刊恕不受理。 五、论文格式及要素:标题、作者、工作单位全称(院系处室)、摘要、关键词、正文、注释、参考文献(遵从国家标准:GB\T7714-2005,点击查看参考文献格式示例)、作者简介(100字内)、联系方式(通信地址、邮编、电话、电子信箱)。 六、处理流程:(1) 通过电子邮件将稿件发到我刊唯一投稿信箱(2)我刊初审周期为2-3个工作日,请在投稿3天后查看您的邮箱,收阅我们的审稿回复或用稿通知;若30天内没有收到我们的回复,稿件可自行处理。(3)按用稿通知上的要求办理相关手续后,稿件将进入出版程序。(4) 杂志出刊后,我们会按照您提供的地址免费奉寄样刊。 七、凡向文教资料杂志社投稿者均被视为接受如下声明:(1)稿件必须是作者本人独立完成的,属原创作品(包括翻译),杜绝抄袭行为,严禁学术腐败现象,严格学术不端检测,如发现系抄袭作品并由此引起的一切责任均由作者本人承担,本刊不承担任何民事连带责任。(2)本刊发表的所有文章,除另有说明外,只代表作者本人的观点,不代表本刊观点。由此引发的任何纠纷和争议本刊不受任何牵连。(3)本刊拥有自主编辑权,但仅限于不违背作者原意的技术性调整。如必须进行重大改动的,编辑部有义务告知作者,或由作者授权编辑修改,或提出意见由作者自己修改。(4)作品在《文教资料》发表后,作者同意其电子版同时发布在文教资料杂志社官方网上。(5)作者同意将其拥有的对其论文的汇编权、翻译权、印刷版和电子版的复制权、网络传播权、发行权等权利在世界范围内无限期转让给《文教资料》杂志社。本刊在与国内外文献数据库或检索系统进行交流合作时,不再征询作者意见,并且不再支付稿酬。 九、特别欢迎用电子文档投稿,或邮寄编辑部,勿邮寄私人,以免延误稿件处理时间。

新来的实习生把数据库搞炸了......

来源:哈尔滨学院学报 【在线投稿】 栏目:综合新闻 时间:2021-02-08 15:59
作者:网站采编
关键词:
摘要:“ SQL 写的秒,涨薪呱呱叫!就在前不久公司新来的实习生因为写错了一条SQL把数据库搞炸了。 图片来自 Pexels 新来的实习生小杨写了一条 SQL 语句: SELECT wx_id from `user` WHERE wx_id = 2 当小

SQL 写的秒,涨薪呱呱叫!就在前不久公司新来的实习生因为写错了一条SQL把数据库搞炸了。

图片来自 Pexels

新来的实习生小杨写了一条 SQL 语句:

SELECT wx_id from `user` WHERE wx_id = 2

当小杨迫不及待准备下班回家的时候,隔壁的王经理一把抓住了小杨,并用 EXPLAIN 命令教育了小杨,小杨流下了没有文化的泪水。

这条 SQL 语句中,wx_id 是具有索引的,但是王经理查出来的结果却是这样的:

王经理的教育

小杨仔细一瞅 key 字段显示为 Null,很明显这条 SQL 语句没有走索引。

小杨心想“糟糕,又写错 SQL 语句了,这下又要面临运维和经理的混合双打了,不行我得立马改下这条 SQL 语句,让我想想哪里出错了”!

小杨脑袋瓜疯狂乱撞,仔细回想表结构,忽然想到,wx_id 字段是 varchar 类型,自己查询的时候竟然没有加引号。

小杨一把抢过经理手里的键盘,往 wx_id 的查询条件上加了引号,结果:

果然这条 SQL 语句开始走了索引。小杨沾沾自喜以为解决了个天大的 Bug。

经理微微一笑问道“你知道为什么为什么加了引号就走了索引吗?如果字段是 int 类型,那么查询的时候需不需要加引号呢?又是为什么呢?”

正餐来了

小杨被问的呆在原地,无法回答。

经过小杨研究发现,如果字段是 varchar类型,等号右侧必须加引号才走索引;如果字段是 int 类型,那么等号右侧加不加引号都是会走索引的。

什么?你不相信小杨说的话,有图有真相。(bonus 字段类型为int)

真相图

但是结论出来,还是无法回答经理的夺命三连问。

小杨搬来了答案

在 MySQL 查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换:

也就是说

SELECT wx_id from `user` WHERE wx_id = 2

等价于

SELECT wx_id from `user` WHERE CAST(wx_id AS signed int) = 2

一旦对索引字段做函数操作,MySQL 会放弃使用索引。

所以如果字段是 varchar 类型,等号右侧必须加引号才走索引,否则由于隐式转换,MySQL 会放弃使用索引。那么凭什么 int 加不加引号都可以使用索引呢?

那是因为 int 类型的数字只有 2 能转化为'2',是唯一确定的。所以虽然需要隐式转换,但不影响使用索引

小杨追问:“你还能在告诉我一些隐式转换的知识吗?”

我反手就是一个英文文档:

If one or both arguments are NULL, the result of the comparison is NULL, except for the NULL-safe equality comparison operator. For NULL NULL, the result is true. No conversion is needed.

If both arguments in a comparison operation are strings, they are compared as strings.

If both arguments are integers, they are compared as integers.

Hexadecimal values are treated as binary strings if not compared to a number.

If one of the arguments is a TIMESTAMP or DATETIME column and the other argument is a constant, the constant is converted to a timestamp before the comparison is performed. This is done to be more ODBC-friendly. Note that this is not done for the arguments to IN()! To be safe, always use complete datetime, date, or time strings when doing comparisons. For example, to achieve best results when using BETWEEN with date or time values, use CAST() to explicitly convert the values to the desired data type.

A single-row subquery from a table or tables is not considered a constant. For example, if a subquery returns an integer to be compared to a DATETIME value, the comparison is done as two integers. The integer is not converted to a temporal value. To compare the operands as DATETIME values, use CAST() to explicitly convert the subquery value to DATETIME.

If one of the arguments is a decimal value, comparison depends on the other argument. The arguments are compared as decimal values if the other argument is a decimal or integer value, or as floating-point values if the other argument is a floating-point value.

In all other cases, the arguments are compared as floating-point (real) numbers.

贴心的我帮你们翻译成了中文:

1, 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用

对两个 NULL 做比较时会返回 1,这两种情况都不需要做类型转换

2, 两个参数都是字符串,会按照字符串来比较,不做类型转换

3, 两个参数都是整数,按照整数来比较,不做类型转换

4, 十六进制的值和非数字做比较时,会被当做二进制串

文章来源:《哈尔滨学院学报》 网址: http://www.hebxyxb.cn/zonghexinwen/2021/0208/555.html



上一篇:如何破解LUKS加密
下一篇:哈尔滨学院附属小学:遍地垃圾 把校园都“包围

哈尔滨学院学报投稿 | 哈尔滨学院学报编辑部| 哈尔滨学院学报版面费 | 哈尔滨学院学报论文发表 | 哈尔滨学院学报最新目录
Copyright © 2018 《哈尔滨学院学报》杂志社 版权所有
投稿电话: 投稿邮箱: