假设已知数据库中存在某条数据时,我们再去插入一条一样的数据(主键冲突的数据),但是并不想提前查询一下也不想数据库报错,有什么处理方式?
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='甘肃省';
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 python的qt5界面
- ¥15 无线电能传输系统MATLAB仿真问题
- ¥50 如何用脚本实现输入法的热键设置
- ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
- ¥30 深度学习,前后端连接
- ¥15 孟德尔随机化结果不一致
- ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
- ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
- ¥15 谁有desed数据集呀
- ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100