mysql中ON DUPLICATE KEY UPDATE和REPLACE INTO用法
来源:互联网 发布:nginx 反向代理 编辑:程序博客网 时间:2024/03/29 20:40
背景:在向数据库中插入语句,尤其是插入的字段包含了主键或者唯一索引时。总是需要先判断要插入的该主键或唯一索引字段值在数据表中是否已经存在,之后还需要依据判断的结果决定是进行添加操作还是修改操作。今天无意发现mysql可以将这个简化的用法,找了些资料,调试完成后将经验总结下。
实现方式有:
1.ON DUPLICATE KEY UPDATE 原理:在确定主键值已经存在后,会进行update修改操作。(可以指定修改的字段,这样可以不影响其他字段的值)
2.REPLACE INTO 原理:在确定主键值已经存在后,会先进行delete删除操作,再进行insert添加操作。(因为是先删除后添加,所以会影响其他字段的值。如果添加的字段值包含了所有的列,可以用这种方式,其他不推荐,会导致数据错误)
上代码部分:
1.REPLACE INTO
REPLACE INTO ecm_goods_status(goods_id,if_stock,stock_price) values(3264604,1,25)
红色框区域的值已经丢失
2.ON DUPLICATE KEY UPDATE
INSERT INTO ecm_goods_status(goods_id,if_stock,stock_price) VALUES(3264604,1,15)ON DUPLICATE KEY UPDATE if_stock=1,stock_price=VALUES(stock_price)
完成需要的操作,并且红色框区域的数据没有丢失
3.ON DUPLICATE KEY UPDATE 多行多列操作(VALUES函数为获取对应列值)
INSERT INTO ecm_goods_status(goods_id,if_stock,stock_price) VALUES(3264427,1,50.00),(3264430,1,2.00),(3264604,1,8.00) ON DUPLICATE KEY UPDATE if_stock=1,stock_price=VALUES(stock_price)4.ON DUPLICATE KEY UPDATE 直接使用查询结果(别名字段不能使用,会导致mysql报识别不了列名的错误)
INSERT INTO ecm_goods_status(goods_id,if_stock,stock_price)select goods_id,1 as if_stock,pro_special_pricefrom ecm_market_activity_apply where goods_id > 0 and ma_type= 21and status=2ON DUPLICATE KEY UPDATE if_stock=1,stock_price=pro_special_price
列别名报错的情况
INSERT INTO ecm_goods_status(goods_id,if_stock,stock_price)select goods_id,1 as if_stock,min(pro_special_price) as pricefrom ecm_market_activity_apply where goods_id > 0 and ma_type= 21and status=2GROUP BY goods_idON DUPLICATE KEY UPDATE if_stock=1,stock_price=price
- mysql中ON DUPLICATE KEY UPDATE和REPLACE INTO用法
- mysql中的replace into和 on duplicate key update
- Mysql中Insert into xxx on duplicate key update和REPLACE INTO使用
- Mysql中Insert into xxx on duplicate key update和REPLACE INTO使用
- mysql中insert into on duplicate key update 和replace into的区别
- MYSQL之REPLACE INTO和INSERT … ON DUPLICATE KEY UPDATE用法
- REPLACE INTO 和 INSERT INTO ... ON DUPLICATE KEY UPDATE SET ...
- replace into 和 insert into *** on duplicate key update
- Mysql replace into 与 insert into on duplicate key update 死锁和性能测试
- mybatis中使用replace into和 insert INTO … ON DUPLICATE KEY UPDATE批量操作
- mysql replace into和 insert into ... on duplicate update 区别
- insert into replace into 和insert into .. on duplicate key update ..
- INSERT INTO ON DUPLICATE KEY UPDATE 与 REPLACE INTO 和 INSERT IGNORE INTO
- Mysql replace into 与 insert into on duplicate key update 的区别
- MySQL的Replace into 与Insert into ..... on duplicate key update ...真正的不同之处
- MySQL的Replace into 与Insert into ..... on duplicate key update ...真正的不同之处
- MySQL的Replace into 与Insert into ..... on duplicate key update
- MySQL的Replace into 与Insert into ..... on duplicate key update ...真正的不同之处
- 第十三周项目3-二进制转换
- UVa 10192 Vacation (DP&LCS)
- 无线网安全隐患
- 【DS】一些简单数
- (Relax 数论 1.5)POJ 1811 Prime Test(MillRabin模板题+Pollard模板题:判定大素数&&合数分解)
- mysql中ON DUPLICATE KEY UPDATE和REPLACE INTO用法
- 石子合并
- 计算机网络帧的封装
- sysfs文件系统
- CentOS下用Tomcat+Zookeeper+Nginx+Solr完美搭建SolrCloud平台(三)
- poj3481 用伸展树来做
- 输出structure gmail imap
- vtk体绘制交互问题的解决方案
- error: unknown field 'ioctl' specified in initializer