课程名称:Java工程师2022版
课程章节:Java数据库开发与实战
课程讲师:IT老齐 悟空 八戒猪 神思者 Leo
课程内容:MySQL对数据的基本操作
一、数据插入
1.INSERT语句
INSERT语句可以向数据表写入记录,可以是一条记录,也可以是多条记录。
可以有两种写法,两种写法都写上了表名,这是为了让这条语句可以更快的执行。
INSERT INTO 表名(字段1,字段2,...)
VALUES(值1,值2,...), (值1,值2,...);
INSERT INTO 表名 (字段1,字段2,...)
VALUES(值1,值2,...), (值1, 值2,...);
首先两种写法都是正确的,但是第一段代码是写入一条数据,第二段代码是写入两条数据。也可以在这里书写子查询,但是要求子查询是单行单列的。
2.INSERT语句的方言
MYSQL的INSERT语句还有一种方言语法 INSERT INTO 表名 SET 字段1=值1,字段2=值2,......;
因为这属于MYSQL语言的方言,所以只能在MYSQL中使用,不能再其他的数据库中使用。
INSERT INTO t_emp
SET empno=8002,ename="JACK",job="SALESMAN",mgr=8000,
hiredate="1985-3-14",sal=2500,comm=NULL,deptno=50;
这里表示的是往t_emp表中插入一条数据,方言的写法中甚至可以省略INTO,省略INTO后依然是正确的。
3.IGNORE关键字
IGNORE关键字会让INSERT只插入数据库不存在的记录。INSERT [IGNORE] INTO 表名......;
INSERT IGNORE INTO t_dept(deptno,dname,loc)
VALUES(70,"A","北京"),(80,"B","上海");
再原有的数据上进行添加数据,因为原有数据中已经有70部门了,又由于IGNORE关键字的存在,所以SQL语句执行的过程中不会报错,但是执行完成后显示的只是执行成功了一条,80部门执行成功。
二、数据更新
1.UPDATE语句用于修改表的记录
UPDATE [IGNORE] 表名
SET 字段1=值1,字段2=值2,......
[WHERE 条件1...]
[ORDER BY ...]
[LIMIT ...];
代码中第一行括号中的IGNORE表示可写可不写,但是要注意,存在IGNORE之后,就算在修改的过程中遇到什么问题,也不会影响代码的正常运行,会去修改不冲突的内容。
同时第一行的UPDATE语句也是确定需要修改的表是哪张表的,也是首先执行的,接着就是WHERE字句,筛选掉不符合的记录,保留符合的记录。这里的LIMIT不能写两个参数,只能写一个,只能是修改前多少条的记录,比如写5,那么就是修改前5条的记录。SET字句是最后一个执行的字句,等筛选后再执行SET语句。
UPDATE语句是可以使用表连接的。因为相关子查询效率非常低,所以我们可以使用表连接的方式来改造UPDATE。UPDATE 表1 JOIN 表2 ON 条件 SET 字段1=值1,字段2=值2,......;
表连接的UPDATE语句可以修改多张表的记录。
UPDATE语句的表连接可以演变成下面的样子,UPDATE 表1,表2 SET 字段1=值1,字段2=值2,...... WHERE 连接条件;
UPDATE t_emp e JOIN t_dept d
SET e.deptno=d.deptno,e.job="ANALYST",d.loc="北京"
WHERE e.ename="ALLEN" AND d.dname="RESEARCH";
上述代码是表连接,但是没有连接条件,首先这样的语法是正确的,因为这个语法再UPDATE中的。然后修改t_emp表中ALLEN的职位,由原来的RESEARCH部分改为ANNLYST,且修改t_dept中的loc字段。
UPDATE语句的表连接既可以是内连接,又可以是外连接。
UPDATE 表1 [ LEFT|RIGHT ] JOIN 表2 ON 条件
SET 字段1=值1,字段2=值2,.....;
三、数据删除
1.DELETE语句用于删除记录,语法如下:
DELETE [IGNORE] FROM 表名
[WHERE 条件1,条件2,......]
[ORDER BY ......]
[LIMIT ......]
首先要说的是关于[],括号表示,可以写也可以不写,然后就是如果没有下面的WHERE,ORDER BY,LIMIT等条件的话就是直接删除表中的数据,但是有这些条件的话就是根据条件去删除。
上述代码执行的顺序是首先执行FROM字句,接着执行WHERE字句,再执行ORDER BY字句,再执行LIMIT字句,最后执行DELETE字句。
因为相关子查询效率非常低,所以我们可以利用表连接的方式来改造DELETE语句。
DELETE 表1,... FROM 表1 JOIN 表2 ON 条件
[WHERE 条件1,条件2,...]
[ORDER BY ...]
[LIMIT ...]
问题:删除员工KING和他的直接下属的员工及记录,用表连接实现。
在执行DELETE语句的过程中,首先临时表(结果集)是不能够删除的。
DELETE e
FROM t_emp e JOIN
(SELECT empno FROM t_emp WHERE ename="KING") t
ON e.mgr=t.empno OR e.empno=t.empno;
DELETE语句的表连接既可以是内连接,又可以是外连接。
DELETE 表1,... FROM 表1 [LEFT|RIGHT] JOIN 表2 ON 条件 ...;
问题:删除SALES部门的员工,以及没有部门的员工。
DELETE e
FROM t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
WHERE d.dname="SALES" OR e.deptno IS NULL;
删除的是t_emp表中的记录,条件是SALES部门的员工,以及没有部门的员工,涉及到的表除了t_emp还有t_dept,连接的条件是两张表部门编号字段deptno。
快速删除数据表全部记录。DELETE语句是在事务机制下删除记录,删除记录之前,先把将要删除的记录保存到日志文件里,然后再删除记录。
TRUNCATE语句再事务机制之外删除记录,速度远超过DELETE语句。TRUNCATE TABLE 表名;
课程总结:
完成了今天的学习目标:
1.数据插入。
2.数据更新。
3.数据删除。