set trans 必须是事务处理的第一个语句_MySQL中FIND_IN_SET探险记

1、业务背景

公司的业务需求是需要分权限分等级的获取不同的内容,因为原来的角色,权限,分组表已经建好,但是又要实现不同产品需要不同等级不同分组的人员管理,在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,查找资料后发现涉及到数据库的特有函数,候mysql的FIND_IN_SET函数就派上用场了,下面来具体了解一下。

f3d473a0759135771a4bb5ea4d8e9696.png

2、表设计

数据库字段部分截图:

824d18bcc74247b5ca80efab616b7945.png
SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (102,ancestors)
dda2036934629028b044dc1421238b8c.png
疑问01:where 后面这跟的是条件吗?疑问02:find_in_set()这怎么用呢?

3、探得究竟

贴图:

SELECT t.dept_id FROM sys_dept t WHERE 0
afd0d1d3aa699dea7cdeef1aa3a5318b.png
SELECT t.dept_id FROM sys_dept tWHERE -1
232e8bda82566e072d86bdd0f1afcaa4.png
SELECT t.dept_id FROM sys_dept t WHERE 12
bd3e28cd866b09663700b506b673ee97.png

问题总结


其实我们大家都知道,where 后面跟随各种查询条件,但是从来没有这么写过,即便是应对开发,也很少有人写到。其实where 类似于 if 就是对条件的判断,返回 true or false。在检索过程中,将满足条件的,即条件为true的结果返回。where能实现类型转换,这一点十分类似JavaScript中的if语句的用法。

4、原来如此

众里寻它千百度,sodesiga,好吧!原来就是个这。

FIND_IN_SET(str,strlist)

第一个参数str是要查找的字符串。

第二个参数strlist是要搜索的逗号分隔的字符串列表。

贴图:

SELECT FIND_IN_SET(1,1)
14a1aed84f176d14ef24a960e45a8138.png

刚说好的字符串,你就给我来个这,mysql你怎么可以这么随意呢!

3f493fda52fe291db5e4f23be228cd0d.png
eb76e8570ffcb580977c267bb4b6386b.png
fdf47b8612231da3795e7623ef693a9b.png

以上图示,有劳读友自行总结

1SELECT t.dept_id,t.parent_id,t.ancestors2FROM sys_dept t WHERE 3FIND_IN_SET (dept_id,'100,101,102,')
e3259955c32aec21aa59ab6c1af825af.png

dept_id,依次等于100,101,102的结果,返回。类似于In 集合操作

1SELECT t.dept_id,t.parent_id,t.ancestors 2FROM sys_dept t WHERE 3dept_id in (100,101,102)
e4806c64a6df128c0c1b0cf8b717ed07.png

5、FIND_IN_SET和like的区别

like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。

20d88fda409d08c143c7ef4e377ecfae.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值