多表查询

1.基本查询语法:

select 列名列表 from 表名列表 where.....

2.多表查询的分类
(1)内连接查询:
隐式内连接:使用where条件

select * from emp,dept where emp.'dept_id'=dept.'id';
select emp.name,emp.gender,dept.name from emp,dept where emp.'dept_id'=dept.'id';

select
t1.name,
t1.gender,
t2.name
from
emp t1,
dept.t2
where
t1.'dept_id'=t2.'id';

显式内连接:
select 字段列表 from 表名1 inner join 表名2 on 条件;

select * from emp inner join dept on emp.'dept_id'=dept.'id';

注意事项:查询主表,查询条件,查询字段
(2)外连接查询:
左外连接:查询的是左边表所有数据和交集部分

select 字段列表 from 表名1 left join 表名2 on 条件;

右外连接:查询的是右边表所有数据和交集部分

select 字段列表 from 表名1 right join 表名2 on 条件;

(3)子查询:
查询中嵌套查询,称嵌套查询为子查询
基本子查询:

select max(salary) from emp;
select * from emp where emp.'salary'=9000;

select * from emp where emp.'salary'=(select max(salary) from emp);

子查询不同情况:
1.结果单行单列
2.结果多行单列

select *from where dept_in in (select id from dept where name='财务部' or name='市场部');

3.结果多行多列

select *from dept t1,(select * from emp where emp.'join_data'>'2011-11-11') t2 where t1.id=t2.dept_id;

事务

1.基本介绍
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
图片说明
(1)开启事务:start transaction;
(2)回滚:rollback;
(3)提交:commit;

1.start transaction;
3.commit;
2.rollback;

2.四大特征
(1)原子性:是不可分割的最小单位,同时成功,同时失败
(2)持久性:事务提交或回滚后,数据库持久化的保存数据
(3)隔离性:多个事务,相互独立
(4)一致性:事务操作前后,数据总量不变
3.隔离级别
多个事务之间是相互独立的,如果多个事务操作同一批数据,会出现问题,设置不同隔离级别就行
问题如下:
(1)脏读:一个事务,读取到另一个事务中未提交的数据
(2)不可重复度(虚读):同一个事务中,两次读取到的不一样
(3)幻读:一个事务操作数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
隔离级别:

serializable

图片说明

DCL

(1)DBA:数据库管理员
(2)DCL:管理用户,授权
管理用户:
(1)添加用户

create  user '用户名'@'主机名' identified by '密码'

删除用户

drop user '用户名'@'主机名'

修改用户密码

updata user set password =password('新密码') where user='用户名'
updata user set password =password('abc') where user='lisi'

set password for '用户名'@'主机名' = password('新密码')

(4)查询用户

切换到mysql数据库:
use mysql;
查询user表
select *from user;

其中%表示所有用户都可以使用,如下图所示:
图片说明

授权:
查询权限:

show grants for '用户名'@'主机名';
show grants for 'list'@'%';

授予权限:

grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
授予所有权限:
grant all on *.* to '用户名'@'localhost' 

撤销权限:

revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';