多表查询
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 '用户名'@'主机名';