mysql数据库Insert语句后面加ON DUPLICATE KEY UPDATE,保证唯一性
2017-02-08 14:22
507 查看
如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。
例如:
建表语句:
sql语句:
这可以保证主键只有一条记录。
附上一段java代码,算是工具类。根据传入BEAN生成SQL语句。
例如:
建表语句:
CREATE TABLE `consume_locus` ( `rds` varchar(255) NOT NULL, `topic` varchar(255) default NULL, `createTime` datetime default NULL, `dtsTime` datetime default NULL, PRIMARY KEY (`rds`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
sql语句:
insert into t_tableName(topic,createTime,dtsTime,rds ) values( null,'2017-02-08 14:02:50','','' ) on duplicate key update topic = values(topic),createTime = values(createTime),dtsTime = values(dtsTime),rds = values(rds) ;
这可以保证主键只有一条记录。
附上一段java代码,算是工具类。根据传入BEAN生成SQL语句。
package dbTest; import java.util.Map; public class DbBean { //列名和列值 private Map<String, String> fieldMap; //表名 private String tablename; public Map<String, String> getFieldMap() { return fieldMap; } public void setFieldMap(Map<String, String> fieldMap) { this.fieldMap = fieldMap; } public String getTablename() { return tablename; } public void setTablename(String tablename) { this.tablename = tablename; } }
public class testDB { public static void main(String args[]) throws InterruptedException{ String createTimeStr=DateUtil.dateToStr(new Date(), DateUtil.YYYYMMDDHHMMSS2); Map<String, String> fieldMap=new HashMap<String, String>(); fieldMap.put("rds", ClusterClientCore.rdsCode); fieldMap.put("topic", ClusterClientCore.topic); fieldMap.put("createTime", createTimeStr); fieldMap.put("dtsTime", ClusterClientCore.dtsTimestamp); DbBean bean =new DbBean(); bean.setFieldMap(fieldMap); bean.setTablename("t_tableName"); String sql=getInsertSqlStr(bean); System.out.println(sql); } /** * 把bean转换为sql语句 * @param bean * @return */ public static String getInsertSqlStr(DbBean bean){ StringBuffer columName=new StringBuffer(); StringBuffer columValue=new StringBuffer(); //幂等操作 StringBuffer duplicateSb=new StringBuffer(); Map<String, String> fieldMap=bean.getFieldMap(); Iterator it=fieldMap.entrySet().iterator(); while(it.hasNext()){ Map.Entry<String, Object> entry=(Map.Entry<String, Object>)it.next(); String key=entry.getKey(); duplicateSb.append(key).append(" = values(").append(key).append("),"); columName.append(key).append(","); if(entry.getValue()!=null){ String value=(String)entry.getValue(); columValue.append("'").append(value).append("'").append(","); }else{ columValue.append(entry.getValue()).append(","); } } String columNameStr=columName.deleteCharAt(columName.length()-1).toString(); String columValueStr=columValue.deleteCharAt(columValue.length()-1).toString(); String sqlStr="insert into "+ bean.getTablename()+"("+columNameStr+" ) values( "+columValueStr+" ) "; String duplicateStr=" on duplicate key update "+duplicateSb.deleteCharAt(duplicateSb.length()-1).toString()+" ;"; return sqlStr+duplicateStr; } }
相关文章推荐
- mysql 批量更新语句 INSERT ON DUPLICATE KEY UPDATE
- mysql INSERT ... ON DUPLICATE KEY UPDATE语句在perl下的使用
- SQL语句实现不存在即插入,存在则increase某字段的功能insert into … on duplicate key update
- 有关sql语句INSERT INTO ..ON DUPLICATE KEY UPDATE..的详解
- MySQL的 insert into ... on duplicate key update语句
- MySQL INSERT ... ON DUPLICATE KEY UPDATE (转)
- 【mysql】insert ... on duplicate key update column=IF(条件,值1,值2 ) 简直神一样的操作
- MySQL的Replace into 与Insert into on duplicate key update真正的不同之处
- mysql ON DUPLICATE KEY UPDATE语句示例
- INSERT ... ON DUPLICATE KEY UPDATE
- MySql避免"重复插入记录"的方法(INSERT ignore into,Replace into,ON DUPLICATE KEY UPDATE)
- MYSQL的REPLACE和ON DUPLICATE KEY UPDATE语句介绍解决问题实例
- MYSQL的REPLACE和INSERT ... ON DUPLICATE KEY UPDATE
- mysql insert语法注意事项(ON DUPLICATE KEY UPDATE )
- mysql insert的几点操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )
- INSERT INTO .. ON DUPLICATE KEY UPDATE ...
- [MySQL技巧]INSERT … ON DUPLICATE KEY UPDATE(转)
- INSERT ... ON DUPLICATE KEY UPDATE
- mysql中insert...on duplicate key update...使用
- (转)replace 和 on duplicate key update语句