SQL语句(先查询后添加用一句SQL实现),需求是如果表A的name值不存在,则添加一条数据,有就不做操作

All rights reserved.No part of this article may be reproduced or distributed by any means,or stored in a database or retrieval system,without the prior written permission of persistenceGoing author
https://blog.csdn.net/persistencegoing/article/details/84376427
 

需求是数据库中表A添加一条数据(name=张三),如果表A中张三值不存在,则添加数据,如果存在就不做操作,如何保证数据库中只存在一个唯一name呢?

 

有三种解决方案:

 

一种是SQL判断,若没有该用户名就添加,如果有就不做其它操作

 INSERT INTO   `child` (`id`, `name`)       SELECT
    '10',
    'Tom'
FROM
    DUAL     
WHERE
    (
        SELECT
            COUNT(0)
        FROM
            `child`  WHERE name= 'Tom'
    ) < 1

 

一种是将name设置成唯一索引(并发会报错,错误是数据库中有该name)

 

一种是service中判断数据库中有没有该name,若没有执行添加的操作,service中要加锁,解决高并发问题(如果是集群下要用分布式锁)

 

其它:

根据主键(id)或者唯一索引(user_name)来判断,如果没有则添加,如果存在,则修改或者删除后修改

比如数据库中有数据id=1,user_name=admin,数据id=2,user_name=xxxx,然后我执行下面的sql

replace into `sys_log` (
    `id`,
    `user_name`,
    `ip`,
    `type`,
    `text`,
    `create_time`
)
VALUES
    (
        '2',
        'admin',
        '777',
        1,
        '777',
        '2018-12-28 19:05:51'
    )

数据库中已经存在id=2,唯一索引为admin的两条数据,那么执行后的结果是删除了id=1,user_name等于admin的数据,id等于2的修改了user_name和其它,也就是说user_name是唯一索引,会删掉其它行user_name=admin的数据之后再修改id=2的行

 

 

根据id判断,如果这个id没有就添加,如果这个id存在,UPDATE 修改自定义东西(多个字段用,)

INSERT INTO `lenos`.`sys_log` (
    `id`,
    `user_name`,
    `ip`,
    `type`,
    `text`,
    `create_time`
)
VALUES
    (
        '1',
        'xxxxxxxxxxxx',
        'lsdxxxxxxxxxxlfs',
        1,
        'rrrrrrrrrrrrr',
        '2018-12-28 19:05:51'
    )
ON DUPLICATE KEY UPDATE type = type + VALUES(type)

 

希望大家关注我一波,防止以后迷路,有需要的可以加群讨论互相学习java ,学习路线探讨,经验分享与java求职      群号:721515304

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值