abel533/Mybatis-Spring

能不能加个方法,有数据的时候就更新,没有的时候就插入,好像特别实用的

shenzhuan opened this issue · 2 comments

能不能加个方法,有数据的时候就更新,没有的时候就插入,好像特别实用的

Service层封装即可。

mysql 存在更新 不存在插入 2010-06-12 18:17:02
分类: Mysql/postgreSQL
看程序竟然发现Mysql有这个功能!
今天写程序,新发现……………………,相当不错^_^,省略了很多功夫,每天1G多的日志!!
MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDATE语法,使得原本需要执行3条SQL语句(SELECT,INSERT,UPDATE),缩减为1条语句即可完成。
INSERT ... ON DUPLICATE KEY UPDATE,当插入的记录会引发主键冲突或者违反唯一约束时,则使用UPDATE更新旧的记录,否则插入新记录。
例如ipstats表结构如下:
CREATE TABLE ipstats (
ip VARCHAR(15) NOT NULL UNIQUE,
clicks SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0'
);
原本需要执行3条SQL语句,如下:
IF (SELECT * FROM ipstats WHERE ip='192.168.0.1') {
UPDATE ipstats SET clicks=clicks+1 WHERE ip='192.168.0.1';
} else {
INSERT INTO ipstats (ip, clicks) VALUES ('192.168.0.1', 1);
}
而现在只需下面1条SQL语句即可完成:
INSERT INTO ipstats VALUES('192.168.0.1', 1) ON DUPLICATE KEY UPDATE clicks=clicks+1;
注意,要使用这条语句,前提条件是这个表必须有一个唯一索引或主键。