- · 《哈尔滨学院学报》栏目[05/20]
- · 《哈尔滨学院学报》数据[05/20]
- · 《哈尔滨学院学报》收稿[05/20]
- · 《哈尔滨学院学报》投稿[05/20]
- · 《哈尔滨学院学报》征稿[05/20]
- · 《哈尔滨学院学报》刊物[05/20]
新来的实习生把数据库搞炸了......(2)
作者:网站采编关键词:
摘要:5, 有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为 timestamp 6, 有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数
5, 有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为 timestamp
6, 有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数会将整数转换为 decimal 后进行比较,
如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较
7, 所有其他情况下,两个参数都会被转换为浮点数再进行比较
再分享一个隐式转换的坑:你是否偶尔删除了一些不知道的数据?
mysql> select * from test;
+----+-------+-----------+
| id | name | password |
+----+-------+-----------+
| 1 | test1 | password1 |
| 2 | test2 | password2 |
| 3 | aaa | aaaa |
| 4 | 55aaa | 55aaaa |
| 5 | 1212 | aaa |
| 6 | 1212a | aaa |
+----+-------+-----------+
6 rows in set (0.00 sec)
mysql> select * from test where name = 1212;
+----+-------+----------+
| id | name | password |
+----+-------+----------+
| 5 | 1212 | aaa |
| 6 | 1212a | aaa |
+----+-------+----------+
2 rows in set, 5 warnings (0.00 sec)
mysql> select * from test where name = '1212';
+----+------+----------+
| id | name | password |
+----+------+----------+
| 5 | 1212 | aaa |
+----+------+----------+
1 row in set (0.00 sec)
上面的例子本意是查询 id 为 5 的那一条记录,结果把 id 为 6 的那一条也查询出来了。我想说明什么情况呢?
有时候我们的数据库表中的一些列是 varchar 类型,但是存储的值为‘1123'这种的纯数字的字符串值,一些同学写 SQL 的时候又不习惯加引号。
这样当进行 Select,Update或者 Delete 的时候就可能会多操作一些数据。所以应该加引号的地方别忘记了。
总而言之
隐式类型转换有无法命中索引的风险,在高并发、大数据量的情况下,命不中索引带来的后果可不止被运维和经理混合双打哦!且写 SQL 且 EXPLAIN!
作者:isysc1
编辑:陶家龙
出处:转载自微信公众号码儿嘟嘟骑(ID:maer_duduqi)
精彩文章推荐:
烦人的弹窗!到底谁是“幕后黑手”?
甲骨文又惊现“离职大礼包”,补偿N+6
对不起,网上找的Redis分布式锁都有漏洞!
文章来源:《哈尔滨学院学报》 网址: http://www.hebxyxb.cn/zonghexinwen/2021/0208/555.html
上一篇:如何破解LUKS加密
下一篇:哈尔滨学院附属小学:遍地垃圾 把校园都“包围