mysql 增删查改

1.insert 语句

insert 语句可以向数据表写入记录,可以是一条记录,也可以是多条记录。

insert into 表名(字段1,字段2.......values(1,值2.....)
insert into t_dept(deptno,dname,loc)
values(60,"产品部","北京"),(10,"行政部","北京")

#向技术部添加一条员工记录
insert into t_emp
(empno,ename,job,mgr,hiredate,sal,comm,deptno)
values(8001,"lili","salesman",8000,"1988-12-20",2000,null,(select deptno from t_dept where dname="技术部"))
insert 语句方言

mysql 的insert语句还有一种方言语法

insert into 表名 set 字段1=1,字段2=2,.....;
insert into t_emp 
set empno = 8002,ename="jack",job="saleman",mgr=8000,hiredate="1985-3-14",sal=2500,comm=null,deptno=50;
2.ignore关键字
ignore 关键字会让insert 只插入数据库不存在的记录。
insert [ignore] into 表名 ....;

在这里插入图片描述

3.update语句

update 语句用于修改表的记录

update [ignore] 表名
set 字段1=1,字段2=2....
[where 条件1....]
[order by ....]
[limit ......]
#把每个员工的编号和上司的编号+1,用order by 子句完成
update t_emp set empno=empno+1,mgr=mgr+1
order by empno DESC;

#把月收入前三名的员工底薪减100元,用limit子句完成
update t_emp
set sal=sale-100
order by sal+ifnull(comm,0) desc
limit 3;
update语句的表连接

相关的子查询效率非常低,所以可以利用表连接的方式来改造update语句

update1 join2 on 条件
set 字段1 =1,字段2=2....;

表连接的update语句可以修改多张表的记录
update的表连接可以演变成下面的样子:

update1 ,2 
set 字段1 =1,字段2=2....
where 连接条件;
#把allen调往research部门,职务调整为analyst
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"

#把底薪低于公司平局底薪的员工,底薪增加150元
update t_emp e join
(select avg(sal) as avg from t_emp) t
on e.sal<t.avg
set e.sal=e.sal+150;
update的表连接既可以是内连接,又可以是外连接
update1 [left|right] join2 on 条件
set 字段1=1,字段2=2.....;
#把没有部门的员工,或者sales部门低于2000元底薪的员工,都调往20部门
update t_emp e left join t_dept d 
on e.deptno=d.deptno
set e.deptno=20
where e.deptno is null or
(d.dname="sales" and e.sal<2000)
4.delete语句

delete语句用于删除记录,语法如下

delete [ignore] from 表名
[where 条件1,条件2.....]
[order by ......]
[limit ......];

使用ignore关键字,有外键限制时,也可以删除。

#删除10部门中,工龄超过20年的员工记录。
delete from t_emp 
where deptno=10 and datediff(now(),hiredate)/365>=20;

#删除20部门中工资最高的员工记录。
delete from t_emp 
where deptno=20 
order by sal+ifnull(comm,0) desc
limit 1;
delete 语句的表连接

因为相关子查询效率非常低,所以我们可以利用表连接的方式来改造delete语句

delete1,.... from1 join2 on 条件
[where 条件1,条件2....]
[order by .....]
[limit .....];
#删除sales部门和该部门的全部员工记录。
delete e,d
from t_emp e join t_dept d 
on e.deptno=d.deptno
where d.dname="sales";

#删除每个低于部门平均底薪的员工记录
delete e
from t_emp e join
(select deptno,avg(sal) as sal from t_emp group by deptno) t
on e.deptno=t.deptno and e.sal<t.sal;

#删除员工king和他的直接下属的员工记录,用表连接实现
delete e,t
from t_emp e join 
(select empno from t_emp where ename="king") t
on e.mgr=t.empno;
delete语句的表连接既可以是内连接,也可以是外连接
delete1..... from1 [left|right] join2 
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;

delete语句是在事务机制下删除记录,删除记录之前,先将要删除的记录保存到日志文件里,然后再删除记录。
truncate语句再事务机制之外删除记录,速度远超过delete语句。

truncate table 表名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值