MySQL,记录我的一些失误操作,预防以后再遇到(持续更新)

MySQL自己一些容易失误的操作


1.被查询字段可能包含特殊值,如null、特殊字符

eg:需要查出某字段值为2的列数据,易写出select * from table where value = 2,但要查出不为2的数据,select * from table where value != 2就容易被背刺一刀了,此时该字段的值若为null的数据是查不出来的,原因是MySQL不能使用=、!=、>、<等运算符计算null数据
解决: 在可能出现null数据的字段使用is null或is not null判断
应该用下面这种写法:

select * from table where value != 2 and value is null
或者
select * from table where ifnull(value,0)!=2
2.被查询字段使用了模糊查询,该数据包含模糊查询的特殊值,需要使用\进行转义

特殊值: %
解决: 加 \ 进行转义

SELECT * FROM stu where class like '%';

模糊查询的全查

SELECT * FROM stu where class like '\%';

包含%的数据

3. 某些框架对前端传入的搜索条件进行了处理,使得搜索条件被改变。导致全查查得到的数据,输入搜索条件之后查不到了
查询条件是'(有限公司)',传到后端被转为了'\&#40;有限公司\&#41;'

解决: 在后端执行查询操作之前使用 HtmlUtils.htmlUnescape(searchParams) 转义一下,这种问题在用不同的数据进行测试的时候容易遇到

4. 更新表中字段,值为1的变为2,值不为1的变为3,可以简写如下
update table set if(type=1,2,3)

应用场景:根据值变更状态

5. 判断该字段值是否为奇数,查出该行

1

select * from stu 
where mod(class,2)=1;

2

应用场景:查出为奇数的行,或者为某个固定倍数的行

6.被查询字段需要行锁,加上for update来查询,如下:
@Select
("SELECT * from bill_table WHERE bill_no=#{billNo} for update")
Bill lockByBillNo(@Param("billNo") String billNo);
  • 加了for update后,在这个查询语句执行完之前,其他的会话不能更改或删除这些被where指定到的行,直到该语句的事务被commit或rollback,前提是where查询的字段加有索引
  • 无索引的话则整张表被锁起来直到这个查询语句执行完。
7.被查询字段按指定状态排序
SELECT * from table
order by case table.status 
when '成功' then 0 when '失败' then 1
when '异常' then 2 else 3 end asc

最后更新:2022.9.15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值