MySQL07

事务

/*
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行

事务的ACID属性:
	原子性:不可分割,要么全部都发生,要么都不发生
	一致性:使数据库从一个一致性状态变换到另一个一致性状态
	隔离性:一个事务的执行不被其他事务所干扰
	持久性:事务一旦提交,改变就是永久的
	
隐式事务:事务没有明显的开启和结束的标记
比如insert、update、delete语句
显式事务:事务具有明显的开启和结束的标记
前提:先设置自动提交功能为禁用  set autocommit = 0;

*/

#演示事务的使用步骤

#开启事务
SET autocommit=0;
START TRANSACTION;
#编写一组事务的语句
UPDATE account SET balance =500 WHERE username = '张无忌';
UPDATE account SET balance =1500 WHERE username = '赵敏';
#结束事务
COMMIT;

#查看当前隔离级别
SELECT @@tx_isolation;
#设置当前MySQL连接的隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

#演示savepoint的使用
set autocommit=0;
delete from account where id=25;
savepoint a;
delete from account where id=28;
rollback to a;

视图

/*
含义:虚拟表,和普通表一样使用,是通过表动态生成的数据

应用场景:
多个地方用到同样的查询结果
该查询结果使用的sql语句较复杂

好处:
重用sql语句
简化复杂的sql操作,不必指导它的查询细节
保护数据,提高安全性
创建语法的关键字 是否实际占用物理空间 使用

视图 create view 否 增删改查,一般不能增删改

表 create table 是 增删改查

*/

创建视图

#一、创建视图
#案例1:查询姓名中包含a字符的员工名、部门名和工种信息
CREATE VIEW v1
AS
SELECT last_name,department_name,job_title
FROM employees e
JOIN departments d
ON d.department_id=e.department_id
JOIN jobs j
ON j.job_id=e.job_id;

SELECT * FROM v1 WHERE last_name LIKE '%a%';

#案例2:查询各部门的平均工资级别
CREATE VIEW v2
AS
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id;

SELECT v2.`avg(salary)`,g.grade_level
FROM v2
JOIN job_grades g
ON v2.`avg(salary)` BETWEEN g.`lowest_sal` AND g.`highest_sal`;

#案例3:查询平均工资最低的部门信息
SELECT * FROM v2
ORDER BY ag LIMIT 1;

#案例4:查询平均工资最低的部门名和工资
CREATE VIEW v3
AS
SELECT * FROM v2
ORDER BY ag LIMIT 1;

SELECT d.*,v3.ag
FROM v3
JOIN departments d
ON d.`department_id`=v3.department_id;

视图的修改

#二、视图的修改
#方式一
/*
create or replace 视图名
as
查询语句;

*/

#方式二
/*
alter view 视图名
as
查询语句;

*/

视图的删除

#三、删除视图
/*
drop view 视图名,视图名······
*/

DROP VIEW v1,v2,v3;

视图的更新

#四、查看视图
DESC v1;

#五、视图的更新

#1.插入
INSERT INTO v1 VALUES('张飞','as@qq.com',10000);

#2.修改
UPDATE v1 SET last_name='张无忌' WHERE last_name ='张飞';

#3.删除
DELETE FROM v1 WHERE last_name='张无忌';

#具备以下特点的视图不允许更新
/*
分组函数、distinct group by、having 、union或union all
select中包含子查询、join、from 一个不能更新的视图、where子句的子查询引用了from中的表
*/

变量

/*
系统变量:
全局变量
会话变量
自定义变量:
用户变量
局部变量

系统变量

#一、系统变量
变量由系统提供,不是用户定义,属于服务器层面
使用的语法:

#1、查看所有的系统变量
SHOW GLOBAL VARIABLES;

#2.查看满足条件的部分变量
SHOW GLOBAL VARIABLES LIKE'%char%';

#3.查看指定的某个系统变量的值
SELECT @@global.系统变量名;

#4.为某个系统变量赋值
SET GLOBAL 系统变量名=值;

SET global.系统变量名=值;

#查看所有会话变量
SHOW SESSION VARIABLES;

自定义变量

#二、自定义变量
/*
		作用域	 	定义和使用的位置	语法
用户变量	当前对话	会话中的任何地方	必须加@符号

局部变量	begin end中	只能在begin end中, 	一般不用加@符号
				且为第一句话
*/
#1.用户变量
针对于当前会话(连接)有效,同于会话变量的作用域

#声明并初始化
SET @用户变量名=值;
SET @用户变量名:=值;
SELECT @用户变量名:=值;

#赋值
SET @用户变量名=值;
SELECT 字段 INTO 变量名
FROM 表;

#查看用户变量的值
SELECT @用户变量名;

#2.局部变量
仅仅在定义它的begin END 中有效

#声明
DECLARE 变量名 类型;
DECLARE 变量名 类型 DEFAULT 值;

#赋值
SET 变量名=值;
SELECT @变量名=值;
SELECT 字段 INTO 变量名
FROM 表;

#使用
SELECT 局部变量名;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值