06. MyBatis 总结
mybatis 传递参数的 7 种方法
mybatis 传递参数的 7 种方法_独钓寒江雪~的博客-CSDN 博客_mybatis 传入对象参数
https://blog.csdn.net/bdqx_007/article/details/94836637
MySQL_插入更新 ON DUPLICATE KEY UPDATE
平时我们在设计数据库表的时候总会设计 unique 或者 给表加上 primary key 的限制条件.
此时 插入数据的时候 ,经常会有这样的情况:
我们想向数据库插入一条记录:
若数据表中存在以相同主键的记录,我们就更新该条记录。
否则就插入一条新的记录。
1 | $result = mysql_query('select * from xxx where id = 1'); |
但是这样写有两个问题
1、效率太差,每次执行都要执行2个sql
2、高并发的情况下数据会出问题,不能保证原子性
还好 MySQL 为我们解决了这个问题:我们可以通过 ON DUPLICATE KEY UPDATE 达到以上目的, 且能保证操作的原子性和数据的完整性。
ON DUPLICATE KEY UPDATE 可以达到以下目的:
向数据库中插入一条记录:
若该数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作, 即UPDATE 后面的操作。
否则插入一条新的记录。
示例:Step1 . 创建表,插入测试数据
1 | DROP TABLE IF EXISTS `mRowUpdate`; |
Step2 .测试 ON DUPLICATE KEY UPDATE 的使用方法:
1 | INSERT INTO mRowUpdate(id,`value`) VALUES(3, 'SuperMan') ON DUPLICATE KEY UPDATE `value`='SuperMan'; |
使用 ON DUPLICATE KEY UPDATE 时,如果将行作为新行插入,则每行受影响的行数值为1; 如果更新了现有行数值,则为2; 如果将现有行数值设置为当前值,则为0。
Tips: VALUES()函数只在INSERT…UPDATE语句中有意义,其它时候会返回NULL。
如果a = 1或 b = 2 匹配多行,则只更新一行。 通常,您应该尽量避免在具有多个唯一索引的表上使用 ondulicate KEY UPDATE 子句。
高效插入
使用 foreach 这种方法效率最高。
1 | <insert id="insertBatch"> |
参考
MySQL_插入更新 ON DUPLICATE KEY UPDATE
https://blog.csdn.net/u010003835/article/details/54381080