换个姿势聊一聊CRUD

本文不去讲CRUD的基础知识,我们来换个姿势聊一聊CRUD操作。我想很多人可能会面临下面这些问题:批量插入数据,一条失败全部回滚,但想忽略失败的数据继续插入怎么办?存在更新数据,不存在插入数据,一定要在每次插入数据之前读一次数据库进行判断吗,批量插入时又怎么办?子查询有没有可能带来性能问题?如何避免?多表连接查询,一个相同的查询条件写在WHERE子句和写在连接条件子句中有何区别?UPDATE操作可以使用表连接吗?可以同时更新多张表吗?DELETE操作可以使用表连接吗?可以同时删除多张表吗?
摘要由CSDN通过智能技术生成

本文不去讲CRUD的基础知识,我们来换个姿势聊一聊CRUD操作。

我想很多人可能会面临下面这些问题:

  • 批量插入数据,一条失败全部回滚,但想忽略失败的数据继续插入怎么办?
  • 数据存在时更新数据,不存在时插入数据,一定要在每次插入数据之前读一次数据库进行判断吗,批量插入时又怎么办?
  • 子查询有没有可能带来性能问题?什么是相关子查询?如何解决相关子查询性能问题?
  • 多表连接查询,一个相同的查询条件写在WHERE子句和写在连接条件子句中有何区别?
  • UPDATE操作可以使用表连接吗?可以同时更新多张表吗?
  • DELETE操作可以使用表连接吗?可以同时删除多张表吗?

接下来,我们直接进入正题。

1. 批量插入,忽略插入失败的数据

有一个部门表,表结构如下:

CREATE TABLE `t_dept` (
  `deptno` int NOT NULL,
  `dname` varchar(20) DEFAULT NULL,
  `loc` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`deptno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

里面有这几条原始数据

INSERT INTO `t_dept` VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO `t_dept` VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO `t_dept` VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO `t_dept` VALUES (40, 'OPERATIONS', 'BOSTON');

往部门表批量插入数据的常规写法:

INSERT INTO t_dept(deptno,dname,loc) VALUES
	(40,'企划部','北京'),
	(50,'培训部','上海'),
	(60,'后勤部','北京'),
	(70,'技术部','北京'),
	(80,'市场部','北京')

deptno是t_dept表中的主键id,假设t_dept表中原来就存在deptno=40的数据。则在执行插入 (40,‘企划部’,‘北京’) 这条记录时会遇到错误,从而回滚事务,其所带来的结果便是一条数据都没有被插入。

如果你想要插入数据时忽略错误,可以用IGNORE关键字:

INSERT IGNORE INTO t_dept(deptno,dname,loc) VALUES
	(40,'企划部','北京'),
	(50,'培训部','上海'),
	(60,'后勤部','北京'),
	(70,'技术部','
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值