当前位置: 首页 > news >正文

手机钓鱼网站生成器如何简述网站建设流程图

手机钓鱼网站生成器,如何简述网站建设流程图,齐鲁建设公司官网首页,搭建网站开发网站环境在实际应用中#xff0c;经常碰到导入数据的功能#xff0c;当导入的数据不存在时则进行添加#xff0c;有修改时则进行更新#xff0c; 在刚碰到的时候#xff0c;一般思路是将其实现分为两块#xff0c;分别是判断增加#xff0c;判断更新#xff0c;后来发现在mysql…在实际应用中经常碰到导入数据的功能当导入的数据不存在时则进行添加有修改时则进行更新 在刚碰到的时候一般思路是将其实现分为两块分别是判断增加判断更新后来发现在mysql中有ON DUPLICATE KEY UPDATE一步就可以完成(Mysql独有的语法)。 ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql 在MySQL数据库中如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句而要插入的行与表中现有记录的惟一索引或主键中产生重复值那么就会发生旧行的更新如果插入的行数据与现有表中记录的唯一索引或者主键不重复则执行新纪录插入操作。 说通俗点就是数据库中存在某个记录时执行这个语句会更新而不存在这条记录时就会插入。 注意点 因为这是个插入语句所以不能加where条件。 如果是插入操作受到影响行的值为1如果更新操作受到影响行的值为2如果更新的数据和已有的数据一样就相当于没变所有值保持不变受到影响的行的值为0。 该语句是基于唯一索引或主键使用比如一个字段a被加上了unique index并且表中已经存在了一条记录值为1 下面两个语句会有相同的效果 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE cc1; UPDATE table SET cc1 WHERE a1; ON DUPLICATE KEY UPDATE后面可以放多个字段用英文逗号分割。 再现一个例子 INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE cVALUES(a)VALUES(b); 表中将更改增加或修改两条记录。 在mybatis中进行单个增加或修改sql的写法为 insert idinsertOrUpdateCameraInfoByOne paramerTypecom.pojo.AreaInfoinsert into camera_info( cameraId,zone1Id,zone1Name,zone2Id,zone2Name,zone3Id,zone3Name,zone4Id,zone4NameVALUES(#{cameraId},#{zone1Id},#{zone1Name}, #{zone2Id},#{zone2Name}, #{zone3Id}, #{zone3Name},#{zone4Id}, #{zone4Name},)ON DUPLICATE KEY UPDATE cameraId VALUES(cameraId),zone1Id VALUES(zone1Id),zone1Name VALUES(zone1Name),zone2Id VALUES(zone2Id),zone2Name VALUES(zone2Name),zone3Id VALUES(zone3Id),zone3Name VALUES(zone3Name),zone4Id VALUES(zone4Id),zone4Name VALUES(zone4Name) /insert 在mybatis中进行批量增加或修改的sql为 insert idinsertOrUpdateCameraInfoByBatch parameterTypejava.util.Listinsert into camera_info(zone1Id,zone1Name,zone2Id,zone2Name,zone3Id,zone3Name,zone4Id,zone4Name,cameraId)VALUESforeach collection list itemcameraInfo index index separator ,(#{cameraInfo.zone1Id}, #{cameraInfo.zone1Name}, #{cameraInfo.zone2Id},#{cameraInfo.zone2Name}, #{cameraInfo.zone3Id}, #{cameraInfo.zone3Name},#{cameraInfo.zone4Id}, #{cameraInfo.zone4Name}, #{cameraInfo.cameraId}, )/foreachON DUPLICATE KEY UPDATEzone1Id VALUES(zone1Id),zone1Name VALUES(zone1Name),zone2Id VALUES(zone2Id),zone2Name VALUES(zone2Name),zone3Id VALUES(zone3Id),zone3Name VALUES(zone3Name),zone4Id VALUES(zone4Id),zone4Name VALUES(zone4Name),cameraId VALUES(cameraId)/insert 项目中数据的操作有时候会令人头大遇到一个需求 需要将数据从A数据库的a数据表同步到B数据库的b数据表中ab表结构相同但不是主从关系。。。just同步过去 第一次同步过去b表为空同步很简单。 但是当a表中的某些数据更新且增加了新数据之后再想让两个表同步就有些麻烦了。如果把b表清空重新同步数据量过大的话耗费的时间太长不是一个好办法 想着能不能按照时间段来做更新这段时间内有新数据了就插入数据有数据更新了就更新数据。先说下我的思路 步骤 1.首先我从a表取出某一时间段的数据分段更新 2.往b表内放数据根据主键判断b表是否已经有此条记录没有此数据则插入有了记录则对比数据是否一样一样则不做更改不一样就做更新操作。 此时使用该语句可以满足需要但是要注意几个问题 更新的内容中unique key或者primary key最好保证一个不然不能保证语句执行正确(有任意一个unique key重复就会走更新,当然如果更新的语句中在表中也有重复校验的字段那么也不会更新成功而导致报错,只有当该条语句没有任何一个unique key重复才会插入新记录)尽量不对存在多个唯一键的table使用该语句避免可能导致数据错乱。 在有可能有并发事务执行的insert 语句情况下不使用该语句可能导致产生death lock。 如果数据表id是自动递增的不建议使用该语句id不连续如果前面更新的比较多新增的下一条会相应跳跃的更大。 该语句是mysql独有的语法如果可能会设计到其他数据库语言跨库要谨慎使用。 主键不连续自增解决方法 源引自https://www.linuxidc.com/Linux/2018-01/150427.htm 最近项目上需要实现这么一个功能:统计每个人每个软件的使用时长,客户端发过来消息,如果该用户该软件已经存在增更新使用时间,如果没有则新添加一条记录,代码如下:     !-- 批量保存软件使用时长表 --     update  idsaveApp  parameterTypejava.util.List     foreach collectionappList itemitem indexindex  separator;      insert into app_table(userName,app,duration)      values(#{userName},#{item.app},#{item.duration})      on duplicate key update durationduration#{item.duration}   /foreach   /update 为了效率用到了on duplicate key update进行自动判断是更新还是新增,一段时间后发现该表的主键id(已设置为连续自增),不是连续的自增,总是跳跃的增加,这样就造成id自增过快,已经快超过最大值了,通过查找资料发现,on duplicate key update有一个特性就是,每次是更新的情况下id也是会自增加1的,比如说现在id最大值的5,然后进行了一次更新操作,再进行一次插入操作时,id的值就变成了7而不是6. 为了解决这个问题,有两种方式,第一种是修改innodb_autoinc_lock_mode中的模式,第二种是将语句修拆分为更新和操作2个动作 第一种方式:innodb_autoinc_lock_mode中有3中模式,0,1和2,mysql5的默认配置是1, 0是每次分配自增id的时候都会锁表. 1只有在bulk insert的时候才会锁表,简单insert的时候只会使用一个light-weight mutex,比0的并发性能高 2.没有仔细看,好像是很多的不保证...不太安全. 数据库默认是1的情况下,就会发生上面的那种现象,每次使用insert into .. on duplicate key update 的时候都会把简单自增id增加,不管是发生了insert还是update 由于该代码数据量大,同时需要更新和添加的数据量多,不能使用将0模式,只能将数据库代码拆分成为更新和插入2个步骤,第一步先根据用户名和软件名更新使用时长,代码如下:   update idupdateApp parameterTypeApp    update app_table    set durationduration#{duration}    where userName#{userName} and appName#{appName}   /update 然后根据返回值,如果返回值大于0,说明更新成功不再需要插入数据,如果返回值小于0则需要进行插入该条数据,代码如下: insert idsaveApp keyProperty id useGeneratedKeys true  parameterTypeApp    insert into app_table(userName,appName,duration)    values(#{userName},#{appName},#{duration})   /insert 产生death lock原理 insert ... on duplicate key 在执行时innodb引擎会先判断插入的行是否产生重复key错误如果存在在对该现有的行加上S共享锁锁如果返回该行数据给mysql,然后mysql执行完duplicate后的update操作然后对该记录加上X排他锁最后进行update写入。 如果有两个事务并发的执行同样的语句那么就会产生death lock如 参考文章 https://www.cnblogs.com/zjdxr-up/p/8319982.html INSERT ... ON DUPLICATE KEY UPDATE产生death lock死锁原理_个人技术博客-潘民兰的博客-CSDN博客
http://www.hkea.cn/news/14310504/

相关文章:

  • 网站不备案可以建设吗买链接网
  • 技术支持 东莞网站建设电脑回收代理网站下载
  • 如何用PS制作网站首页微信营销软件
  • django做的网站模板工程信息网站排名
  • 惠安 网站建设公司怎么做交互式网站
  • 市场推广计划方案关键词优化招商
  • 建设一个商城网站大概多少钱wordpress 增加新功能
  • 绍兴网站建设推广企业网站建设 租用服务器
  • 网站建设格式合同php后台关闭网站 功能怎么实现
  • 手机主题如何自己制作网站wordpress设置 vip栏目
  • 公司网站设计广州越秀重点场所
  • 织梦网站开发语言wordpress大侠
  • 兖州网站建设推广wordpress镜像什么意思
  • 做一个网站需要投入多少钱广东网站设计公司价格
  • 做网站要学会那些北京seo邢云涛
  • 免费网站ppt模板下载晋中路桥建设集团网站
  • 吕梁做网站公司做网站前置审批
  • 深圳专业网站建设公网页设计图片位置怎么设置
  • 类似猪八戒的网站建设深圳商业网站建设
  • 北京网站改版费用wordpress百度地图
  • 网站服务器名是什么手机上做app的软件
  • 无成本搭建属于自己的网站崔各庄地区网站建设
  • 英文网站模板改成中文济宁 网站建设
  • 如何在网站添加代码优秀网页设计作品案例欣赏
  • 网站gif图标asp.net 网站开发 异步
  • 九江专业网站建设定制中国进出口贸易平台
  • 社保代缴网站开发wordpress json插件
  • 广西做网站公司有哪些免费教如何php网站建设
  • 网站开发专家网站建设培训班价格
  • 合肥企业快速建站wordpress适合手机