He_mengcheng 2021-04-13 23:34 采纳率: 50%
浏览 169
已采纳

插入一条主键冲突的数据,如何不提前查询,也不想数据库报错就可以避免的方法

假设已知数据库中存在某条数据时,我们再去插入一条一样的数据(主键冲突的数据),但是并不想提前查询一下也不想数据库报错,有什么处理方式?

  • 写回答

3条回答 默认 最新

  • 毛惜时 2021-04-14 00:14
    关注

    先捋一下思路:我们插入一条一样的数据(主键冲突的数据),并且不想让数据库报错。可以在业务层处理,也可以在数据库层处理。在业务层处理就是你说的先查一下数据库做一个判断,但现在你不想在业务层处理。那可以在数据库层处理,在mysql中已经帮我们封装好了语句,有三种方法如下:

    1. insert ignore:会自动忽略数据库已经存在的数据(根据主键或者唯一索引判断),如果没有数据就插入数据,如果有数据就跳过插入这条数据。

    insert ignore into person (id,name,age,address) values(3,'xx',23,'甘肃省'),(4,'aa',25,'浙江省');

    2、replace into 首先尝试插入数据到表中, 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。否则,直接插入新数据。

    replace into person (id,name,age,address) values(3,'xx',23,'甘肃省'),(4,'aa',25,'浙江省');

    3、insert on duplicate key update(推荐使用)会在出现重复数据(根据主键或者唯一索引判断)的时候按照后面字段更新的描述对该信息进行更新操作。

    insert into person (id,name,age,address) values(3,'xx',23,'甘肃省') on duplicate key update name='aa', age=23, address='甘肃省';

     

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 vue3+element-plus页面崩溃
  • ¥15 像这种代码要怎么跑起来?
  • ¥15 怎么改成循环输入删除(语言-c语言)
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理