mysql语法支持数据存在更新,不存在插入。判断的依据是唯一索引的字段是否冲突,如果冲突,则执行更新操作;如果没有冲突,则执行插入操作。对于本文中的例子就是主键id、分组group_id和分卷序号fen_juan_xu_hao。
那么可以使用DUPLICATE、REPLACE INTO方式处理数据。
语法
INSERT INTO 表名(唯一索引列, 列2, 列3) VALUE(值1, 值2, 值3) ON DUPLICATE KEY UPDATE 列=值, 列=值
INSERT INTO file_temp (id, file_name, group_id, bucket_name, original, type, file_size, fen_juan_size, fen_juan_xu_hao, zhuang_tai, create_user, update_time, tenant_id) VALUES (1714455010759065613, /minio/file/ceShi/测试.zip, 00-001-0001, ceShi, 测试.zip, zip, 117617757, 118062248, 0, '成功', 1, 2023-10-18 10:49:54, 2023-10-18 10:49:54) ON DUPLICATE KEY UPDATE fen_juan_xu_hao= 1,update_time=current_timestamp();
语法
REPLACE INTO 表名称(列1, 列2, 列3) VALUES(值1, 值2, 值3)
REPLACE INTO file_temp (id, file_name, group_id, bucket_name, original, type, file_size, fen_juan_size, fen_juan_xu_hao, zhuang_tai, create_user, update_time, tenant_id) VALUES (1714455010759065613, /minio/file/ceShi/测试.zip, 00-001-0001, ceShi, 测试.zip, zip, 117617757, 118062248, 0, '成功', 1, 2023-10-18 10:49:54, 2023-10-18 10:49:54)
如果不知道主键id的情况下,根据部分条件查找进行插入或更新数据,比如:类型是zip的和分卷序号为0的,但并不知道这条数据在或者不在,也不知道主键id的情况
插入语句
INSERT INTO file_temp (id, file_name, group_id, bucket_name, original, type, file_size, fen_juan_size, fen_juan_xu_hao, zhuang_tai, create_user, update_time, tenant_id) VALUES (1714455010759065613, /minio/file/ceShi/测试.zip, 00-001-0001, ceShi, 测试.zip, zip, 117617757, 118062248, 0, '成功', 1, current_timestamp(), 2023-10-18 10:49:54) from DUAL where not exists(select id from file_temp where type = '.zip' and fen_juan_xu_hao = 0);