常用或不常用的sql语句

本文介绍MyBatis框架中批量插入、查询、更新数据的方法,涵盖使用动态SQL进行条件筛选、格式化输出及复杂数据处理技巧。同时,分享了MySQL数据库的实用操作,包括获取自增ID、解决死锁问题、批量更新数据等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

批量插入

<insert id="addGoods" parameterType="map">
        insert into odr_order_goods(version, deleted, createdBy, creator, createTime)
        values
        <foreach collection="goodsList" item="item" index="index" separator=",">
            (
            0,0,#{item.createdBy},#{item.creator},#{item.createTime}
            )
        </foreach>
    </insert>

批量查询

where a.XX in 
<foreach collection="id" index="index" item="item" open="(" separator="," close=")">
          #{item}
</foreach>

插入数据后返回记录id

<insert id="insertMerchant"  parameterType="Merchant" useGeneratedKeys="true" keyProperty="id">
...
</insert>
//insert语句之前使用;
//然后可以在传入的参数中直接获取id
<selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER">
            SELECT LAST_INSERT_ID() AS id
</selectKey>

根据时间筛选记录

//'%Y-%m-%d %H:%i'到分  '%Y-%m-%d %H:%i:%S 到秒
<if test="startTime != null and startTime != ''">
   AND DATE_FORMAT(a.createTime,'%Y-%m-%d %H:%i') >= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
    AND DATE_FORMAT(a.createTime,'%Y-%m-%d %H:%i') <![CDATA[ <= ]]> #{endTime}
 </if>

格式化金额到2位数

ROUND(a.XXX,2) //精确数字两位小数 **后续可进行计算**
FORMAT(a.XXX, 2) //精确数字两位小数  **后续不可进行计算**

case when 语法

case a.deleted 
when 0 THEN '已完成' 
when 1 THEN '已撤单' 
end 
as deletedName //别名

if语法

if(a.deleted='1','已删除','未删除') as XXX //如果deleted等于1,则取‘已删除’,否则取‘未删除’
IFNULL(a.orderSumAmount,0) //如果orderSumAmount为null,则值为0

使用union合并两张表结果,注意

两张表结果查询出的结果,字段名字必须完全相同,并一一对应

MySql 获取自增序号

select **(@i:=@i+1)sn**,a.* from biz_spend_order_goods a,**(select @i:=0)t** WHERE  goodsId=5 and type=2  ORDER BY a.id asc

查询数据库是否被锁定,或者造成死锁

select * from information_schema.innodb_trx;

select * from information_schema.innodb_locks;

select * from information_schema.innodb_lock_waits;

show full processlist

kill 142975   //杀死被锁线程

从一张表批量更新(复制)数据到另一张表

//从m表中查询数据并复制更新到r表中
UPDATE biz_spend_order r
INNER JOIN (SELECT id,proviceCode,cityCode,areaCode,provinceName,cityName,areaName FROM biz_member) m ON m.id=r.memberId
SET r.proviceCode=m.proviceCode,r.cityCode=m.cityCode,r.areaCode=m.areaCode,r.provinceName=m.provinceName,r.cityName=m.cityName,r.areaName=m.areaName;

将以逗号分隔值拆分成多个单个值

//a.parentIds 值举例:5/6/9/
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(a.parentIds,'/',b.help_topic_id+1),'/',-1) AS num
FROM
wo_category a,mysql.help_topic b
WHERE
b.help_topic_id <![CDATA[ < ]]> LENGTH(a.parentIds)-LENGTH(REPLACE(a.parentIds,'/',''))+1 and a.id = #{id}

持续更新…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值