一、常用函数
(1)uuid()
select uuid(); //生成随机数
select replace(uuid(),'-',''); //将随机数的-去掉
select upper(replace(uuid(),'-','')); ///改成大写
应用举例:
(1)非自增主键
非自增主键,insert语句的value中必须要有这个主键,下面的例子主键是id
Mapper.xml
<insert id="insertTemplateContractInfo" parameterType="com.bocsoft.cmis.e20200.cmis02.dal.entity.contract.model.TemplateContractInfo">
<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
SELECT UPPER(REPLACE(UUID(),'-',''))
</selectKey>
insert into template_info(id,order_Id,template_id,rec_id,template_type,template_name,template_attachment_id,business_type,start_time,post_no,status,list_no,LINE,isGuarantee,apply_business_name,post_file_id,attachment_id)
values(#{id},#{orderId},#{templateContractId},#{recId},
<if test="templateType == ''">null</if>
<if test="templateType != ''">#{templateType}</if>
,#{templateName},#{template_attachment_id},
<if test="businessType == ''">null</if>
<if test="businessType != ''">#{businessType}</if>
,#{startTime},#{postNo},#{status},#{listNo},#{line},#{isGuarantee},#{applyBusinessName},#{postFileId},#{attachment_id})
</insert>
(2)自增主键
自增主键, insert语句的value中不需要有这个主键,因为本来就是自增的,会自动生成+1,下面的例子主键是law_id,value中没有写law_id,不需要
Mapper.xml
<insert id="insertLawAdStatisDetail" parameterType="java.util.Map">
<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="lawNo">
select last_insert_id()
</selectKey>
insert into lawad_statis_detail(rec_id,branch1_id,SIGN_OUT_DATE) values(#{recId},#{branch1Id},#{date})
</insert>
(2) last_insert_id()
一般我们在创建表时,表的主键(id),都会设置为 primary key
和 auto_increment
。这样我们在 insert 数据时可以不用指定 id,MySQL 会自动根据上一条的 id,使本次 insert 的数据 id 自增 1。
如果我们在数据库新插入一条数据并且想立即操作 ta(这时想要知道 ta 的 id)。
MySQL 为我们提供了以下方法(只适用于自增主键)
//获取当前执行的最后一个insert语句的自增ID
select last_insert_id();
应用:
可以取得自增主键的值,省去添加完数据还要重新查询一次Id值的麻烦
ServiceImpl.java
Map detailMap = new HashMap();
detailMap.put("recId",basicInfo.getRecId());
// todo 不从session获取一级行,待确定
//detailMap.put("branch1Id", UserUtil.getUser(session).getBranch1());
detailMap.put("branch1Id", user.get(0).getBranch1());
detailMap.put("date",signoutDate);
lawADDao.insertLawAdStatisDetail(detailMap);
int lawNo = Integer.parseInt(detailMap.get("lawNo") + "");
Mapper.xml
<insert id="insertLawAdStatisDetail" parameterType="java.util.Map">
<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="lawNo">
select last_insert_id()
</selectKey>
insert into lawad_statis_detail(rec_id,branch1_id,SIGN_OUT_DATE) values(#{recId},#{branch1Id},#{date})
</insert>
二、SQL基础
1、建表
CREATE TABLE `test_detail` (
`REC_ID` VARCHAR(32) NOT NULL COMMENT '记录id',
`LAW_NO` INT NOT NULL AUTO_INCREMENT,
`BRANCH1_ID` VARCHAR(5) DEFAULT NULL COMMENT '一级机构号',
`SIGN_OUT_DATE` DATETIME DEFAULT NULL COMMENT '签发时间',
PRIMARY KEY (`LAW_NO`) USING BTREE,
UNIQUE KEY `REC_ID` (`REC_ID`) USING BTREE
) ENGINE=INNODB AUTO_INCREMENT=6791 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='意见发文号详情'
2、备份表
CREATE TABLE test1_20231115 LIKE test1;
INSERT INTO test1_20231115 SELECT * FROM test1;