MySQL多表&&事务

多表查询

*查询语法
	select 列名列表 from 表名列表 where ....
*笛卡尔积:有两个集合A,B,取两个集合的所有组成情况,要完成多表查询,需要消除无用的数据
*分类
	1. 内连接查询
		*从哪些表中查询数据
		*条件是什么
		*查询哪些字段
		1. 隐式内连接:使用where条件消除
			*语法:select .... from 表1 t1,表2 t2 where t1.xx = t2.xx
			例如:select 
					r.*,s.StudentName 
				 from 
					result r,student s 
				 where 
					r.StudentNo = s.StudentNo;
		2. 显式内连接:
			*语法:select .... from 表1 [inner] join 表2 on 连接条件 
			例如:select r.*,s.StudentName 
				   from result r 
				  inner join student s 
				     on r.StudentNo = s.StudentNo;
	2. 外连接查询
		1. 左外连接:查询的是左表所有数据和条件的交集部分
			*语法:select ... from 表1 left [outer] join 表2  on 连接条件;
			例如:以左表为主表  显示左表所有记录 右边的符合条件的显示出来 不符合就空
				select r.*,s.StudentName 
				from result r 
				left join student s 
				on r.StudentNo = s.StudentNo;
		2. 右外连接:查询的是右表所有数据和条件的交集部分
			*语法:select... from 表1 right [outer] join 表2 on 连接条件
			例如:以右表为主表  显示所有记录 左边的符合条件的显示出来 不符合就空
				select r.*,s.StudentName 
				from result r 
				right join student s 
				on r.StudentNo = s.StudentNo;
	3. 子查询
		*概念:查询中嵌套查询,称嵌套查询为子查询  成绩最高分的学生信息
			select * from xs where xs.score = (select max(score) from cj);
		*子查询的不同情况
			1. 子查询的结果是单行单列的  成绩小于平均成绩的学生信息
				例如:select * from xs where xs.score = < (select avg(score) from cj);
			2. 子查询的结果是多行单列的  查询财务部和市场部所有员工信息
				*子查询可以作为条件,使用运算符in来判断
					select * from emp where dept_id in(select id from dept where name = '财务部' OR name = '市场部');
			3. 子查询的结果是多行多列的  查询入学时间是2018-11-11号之后的学生信息和院信息
				**子查询可以作为虚拟表参与查询
				例如:select * from dept t1,(select * from emp where emp.`join_date` > '2018-11-11') t2 where t1.id = t2.id;

事务

1. 事务的基本介绍
	1. 概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
	2. 操作:
		1. 开启事务:start transaction;
		2. 回滚:rollback;
		3. 提交:commit;
		4. MySQL数据库中事务默认自动提交(手动要先开启事务,再提交)
			*Oracle默认是手动提交
			*一条DML(增删改)会自动提交一次事务。
			*修改事务的默认提交方式:
				1. 查看事务的默认提交方式:select @@autocommit;1--自动,0--手动。
				2. 修改默认提交方式:set @@autocommit = 0;
2. 事务的四大特征:
	1. 原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
	2. 持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
	3. 隔离性:同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。
	4. 一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。(数据总量不变)
3. 事务的隔离级别(了解)
	1. 概念:多个事务之间隔离的、相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
	2. 事务的并发问题
		1. 脏读:一个事务读取到另一个事务中没有提交的数据。
		2. 不可重复读:在同一个事务中,两次读到的数据不一样。
		3. 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条语句,则第一个事务查不到自己的修改。
	3. 隔离级别:
		1. 读未提交 read uncommitted:
			*产生的问题:脏读、不可重复读、幻读。
		2. 读已提交 read committed: (Oracle Sql Server默认的)
			*产生的问题:不可重复读、幻读。
		3. 可重复读 repeatable read:(MySQL默认的)
			*产生的问题:幻读。
		4. 串行化 serializable:
			*可以解决所有问题。
		*注意:隔离级别从小到大安全性越来越高,但是效率越来越低。

DCL 管理用户&&授权

*DBA:数据库管理员
1. 管理用户
	1. 添加用户
		*语法:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
	2. 删除用户
		*语法:DROP USER '用户名'@'主机名';
	3. 修改用户密码
		*语法:1. UPDATE USER SET PASSWORD = PASSWORD('新密码') INDIFIED BY '密码';
			  2. SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
		*mysql中忘记了root密码
			1. cmd-->net stop mysql 停止mysql服务
				*需要管理员运行cmd
			2. 使用无验证方式启动mysql服务:mysql --skip-grant-tables
			3. 打开新的cmd窗口,直接输入mysql,敲回车就可登录成功。
			4. use mysql
			5. update user set password = password('你的新密码') where user = 'root';
			6. 关闭两个窗口
			7. 打开任务管理器,手动结束mysql.exe的进程
			8. 启动mysql服务
			9. 使用新密码登录
	4. 查询用户
		1. 切换到mysql数据库  use mql;
		2. 查询user表         select * from user;
		*通配符:% 表示可以在任意主机使用用户登录数据库
2. 权限管理
	1. 查询权限
		*语法:SHOW GRANTS FOR '用户名'@'主机名';
	2. 授予权限
		*语法:grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
	3. 撤销权限
		*语法:REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值