1关于特殊字符串的模糊搜索 比如%_
mysql中使用模糊搜索去查_或者%的字段时候,会将所有的数据(除了name is null)的数据会全部查出来。
SELECT * FROM del WHERE name like '%_%'
SELECT * FROM del WHERE name like '%%%'
但是我们想模糊搜索的只有带'%'或者'_', 一般这种情况下%、_前面都需要带转义符,mysql提供一个 ESCAPE。首先举个例子
SELECT * FROM del WHERE name like '%@_%' ESCAPE '@';
通过这个demo可以清楚了解到 ESCAPE将 字段中的'@'作为转义符。使得这个sql执行时候,得到我们想要的结果-获取所有name中带有_的数据。
值得注意的是 ESCAPE 可以指定任何字符为转义符 ,比如将数字7设置为转义符(所以在sql中遇到需要使用转义符的地方需要多注意,用什么字符设置为转义符好):
2mysql执行update语句受影响行数是0
先说明原因
对于再次返回0,网上的资料是,MySQL 为了提升性能,当它发现要执行的修改内容与数据库中完全一致时,对它而言,此时修改是毫无意义的,反而会消耗一次执行修改的性能,于是它就不再做修改,因而受影响行数就是0。
此外,网上还找到和mybatis相关;但是实际执行的过程用的是mybatis(sql写在xml文件中),并没有下列结果。个人猜测下列应该是用Mybatis Plus,将sql封装起来使用这种结果
至于mybatis,网上有说mybatis这个第三方持久化框架返回来的是被匹配的影响行数,所以返回的始终是1,那如果想要以返回的行数作为判断结果,需要在db连接串里使用useAffectedRows=true,即
jdbc:mysql://127.0.0.1:3306/cn_appoint?characterEncoding=utf-8&useAffectedRows=true