MySQL INSERT or SELECT

MySQL中,如果存在数据重复插入的情况,我们一般通过数据库CAID理论中的“一致性(Consistency)”特性来保证。

即:UNIQUE index or PRIMARY KEY

1、INSERT or UPDATE

我们可以通过“INSERT ... ON DUPLICATE KEY UPDATE Syntax”来实现。

2、INSERT or SELECT

即:不知道待插入数据是否已经存在。如果不存在的话,插入数据并查询;如果存在的话,查询。

字段“field”设置唯一索引:UNIQUE index

这里存在的写法1:

// 查询是否已存在
Object data = Statement.execute("select * from table where field = 'val'");
if (null != data) {
    return data;
}
else {
    // 不存在则插入
    Statement.execute("insert into table (field) values ('val')", Statement.RETURN_GENERATED_KEYS);
    // 获取自动生成的主键
    int id = getGeneratedPrimaryKey(Statement);
    inputData.id = id;
    return inputData;
}

感觉略别扭,并且可能存在并发导致insert失败,导致程序出现异常。

换个写法2:

使用:INSERT IGNORE INTO语法,INSERT IGNORE INTO 与INSERT INTO的区别就是INSERT IGNORE INTO会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据。

// 使用insert IGNORE,即使出现UNIQUE index冲突,依然能正常执行
Statement.execute("insert IGNORE into table (field) values ('val')");
Object data = Statement.execute("select * from table where field = 'val'");
return data;

感觉简洁明了了很多。over~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值