SQL语言--TCL事物控制语言和DCL数据控制语言

SQL语言--TCL事物控制语言

有时我们需要使用DML进行批量数据的删除,修改,增加。比如,在一个员工系统里,我们想要删除一个人的信息,除了删除这个人的基本信息外,还应该删除与此人有关的其他信息,如邮箱,地址等等。那么从开始执行到结束,就会构成一个事务。

对于事务,我们要保证事务完整性,要么成功,要么撤回。

一般情况下,事务要符合四个条件(ACID)

原子性(Atomicity):

事务要么成功,要么撤回,不可切割性

一致性(Consistency):

事务开始前和结束后,要保证数据一致性。转账前账号A和账号B的钱总数为10000;转账后账号A和账号B的钱总数应还为10000;

隔离性(Isolation):

当涉及到多用户操作同一张表时,数据库会为每个用户开启一个事务。那么当其中一个事务正在进行时,其他事务应处于等待状态。保证事务之间不会受影响。

 

持久性(Durability):

当一个事务被提交后,我们要保证数据库里的数据是永久改变的。即使数据库崩溃了,我们也要保证数据的完整性。

 

commit:提交

rollback :撤回,回滚

savepoint 保存点

 

事务:只有DML操作会触发一个事务

存储引擎(ENGINE):就是指表类型

当存储引擎为innodb时,才支持事务,有一个默认的存储引擎为Myisam,不支持事务。

事务的验证:

第一步:start transaction

第二步:savepoint 保存点名称

第三步:DML

第四步:commit/rollback

 

SQL之DCL:数据控制语言

作用是用来创建用户,给用户授权,撤销权限,删除用户

create  user

grant

revoke

drop    user

格式:

1.创建用户

create user username@ip identified by newpassword ;

--练习一:创建一个用户,scott,密码是tiger

create user baby@localhost identified by 'tiger';

 

2.显示用户权限

show grants for username@ip;

3.授权

grant权限1,权限2,..on 数据库名.* to username@ip;

DML权限:insert,delete,update

DQL权限:select

DDL权限:create,alter,drop...

4.撤销权限

revoke 权限1,权限2...on 数据库名.*from username@ip

5.删除用户

drop user username;

使权限立即生效:

flush privileges;

 

关联查询

有的时候,我们查询的数据不在一张表中,可能会涉两张表,或多张表,此时我们使用关联查询

格式:select * from tname1,tname2;

--查询两张表emp和dept

select * from emp,dept;

 

笛卡尔积:在做多张表查询时,出现的记录数为在做这些表的记录数的乘积。

通常,笛卡尔积没有价值(数据冗余)不需要。

t1 有10条记录

t2 有20条记录

查询附数目为10*20

等值查询:两张表的字段有关系的查询,做等值连接,需要使用where条件。

使用表别名

Select e.ename“员工姓名”,e.deptno“部门号”from emp e,d,where e.deptno=d.deptno;

练习:

--5.查看10,20,30号部门中姓名带A的员工编号

select empno,ename,deptno from emp where ename like'%A%' and deptno in(10,20,30) ;

--6.查看10,20号每个部门的最高月薪,平均奖金,部门人数

select max(sal+ifnull(comn,0)),avg(ifnull(comn,0)),count(*) from emp where deptno in(10,20) group by deptno;

--7.查看部门平均工资大于1000的所有部门号,平均奖金,按照部门号降序排序

select  deptno ,avg(ifnull(comn,0)) from emp group by sal having avg(ifnull(sal,0))>1000 order by deptno DESC;

--8.查询领导编号

select distinct mgr from emp where mgr is not null;

 

--1.等值查询

--练习1.查询部门表的名称及其每个部门员工的员工编号和姓名及其职位,部门编号。按照部门号降序排列。

select dname,empno,ename,job,e.deptno"部门编号" from emp e,dept d where e.deptno=d.deptno order by e.deptno DESC;

--练习2.使用join on 进行等值连接

select  dname,empno,ename,job,emp.deptno"部门编号" from emp join dept on emp.deptno=dept.deptno order by emp.deptno DESC;

--练习3.查询20和30部门的部门名称和部门地址和员工名称和工资

select e.deptno"部门编号",dname,ename,e.sal from emp e join dept d on e.deptno=d.deptno where e.deptno in(20,30)order by e.deptno;

 

猜你喜欢

转载自blog.csdn.net/qq_42721694/article/details/82531298