mysql 索引重复 更新_MySQL——ON DUPLICATE KEY UPDATE添加索引值实现重复插入变更update...

1. INSERT INTO tablename(field1,field2, field3, ...) VALUES(value1, value2, value3, ...) ON DUPLICATE KEY UPDATE field1=value1,field2=value2, field3=value3, ...;

INSERT INTO f_cameras (cameraname,cameraIndexCode) VALUES (?,?) ON DUPLICATE KEY UPDATE

cameraIndexCode= VALUES(cameraIndexCode),camername= VALUES(cameraname)

public void insertRegionList(List regionInfoData){

Log4JConfigureServlet.LOGINFO.info("insertRegionList start");

Log4JConfigureServlet.LOGINFO.info("regionInfoData.size()=" + regionInfoData.size());

List factoryList = new ArrayList<>();

List areaList = new ArrayList<>();

for (Region cc : regionInfoData){

if(cc.getParentIndexCode().equals("root000000")){

factoryList.add(cc);

}else if(!cc.getParentIndexCode().equals("-1")){

areaList.add(cc);

}

}

Log4JConfigureServlet.LOGINFO.info("factoryList==="+ JSON.toJSONString(factoryList));

Log4JConfigureServlet.LOGINFO.info("areaList===" + JSON.toJSONString(areaList));

Connection conn = null;

PreparedStatement pst = null;

PreparedStatement pst2 = null;

ResultSet rs = null;

try {

conn = DbUtil.getConnection();

if(conn!=null) {

conn.setAutoCommit(false);// 更改JDBC事务的默认提交方式

//cameraIndexCode设置为Unique索引

String sql = "INSERT INTO f_factory (factoryid,factory) " +

"VALUES (?,?) " +

"ON DUPLICATE KEY UPDATE " +

"factoryid= VALUES(factoryid)," +

"factory=VALUES(factory)";

String sql2 = "INSERT INTO f_areas (areaid,areaname,factoryid) " +

"VALUES (?,?,?) " +

"ON DUPLICATE KEY UPDATE " +

"areaid= VALUES(areaid)," +

"areaname=VALUES(areaname)," +

"factoryid=VALUES(factoryid)";

pst = (PreparedStatement) conn.prepareStatement(sql);

pst2 = (PreparedStatement) conn.prepareStatement(sql2);

Log4JConfigureServlet.LOGINFO.info("insertRegionList conn.prepareStatement(sql)");

for (Region cc:factoryList) {

pst.setString(1, cc.getIndexCode());

pst.setString(2, cc.getName());

pst.addBatch();

Log4JConfigureServlet.LOGINFO.info("insertRegionList pst.addBatch()");

}

for (Region cc:areaList){

pst2.setString(1, cc.getIndexCode());

pst2.setString(2, cc.getName());

pst2.setString(3, cc.getParentIndexCode());

pst2.addBatch();

Log4JConfigureServlet.LOGINFO.info("insertRegionList pst2.addBatch()");

}

pst.executeBatch();

pst2.executeBatch();

Log4JConfigureServlet.LOGINFO.info("insertRegionList pst.executeBatch()");

conn.commit();

conn.setAutoCommit(true);

Log4JConfigureServlet.LOGINFO.info("insertRegionList end");

}

} catch (Exception e) {

try {

if(conn!=null)

conn.rollback();

} catch (SQLException ex) {

ex.printStackTrace();

}

String error = e.getCause().getLocalizedMessage();

if (error == null) {

error = e.getCause().toString();

}

Log4JConfigureServlet.LOGINFO.info("操作数据库失败错误为 is " + error);

} finally {

DbUtil.close(rs, pst, conn);

}

}

springboot mapper.xml写法:insert into f_cameras (cameraname, cameraIndexCode)

values (#{cameraname,jdbcType=VARCHAR}, #{cameraIndexCode,jdbcType=VARCHAR})

ON DUPLICATE KEY UPDATE

cameraname=#{cameraa,jdbcType=VARCHAR},carNum=#{cameraIndexCode,jdbcType=INTEGER}, optTime=CURRENT_TIMESTAMP2.新建Unique索引当Unique索引栏位的原始值和插入值一样时,执行update。反之,执行insert

0f1f8eda475207a888d76f8bc8f1885e.png

2714c778a9d2a69a1c4ef7bd08f7dd5e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值