Mysql学习及笔记07--TCL语言,事务,事务隔离,视图,视图的创建,视图的修改(删除、查看、更新),不可以更新的视图

1、TCL(Transaction Control Language)事务控制语言

事务:
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行

事务的属性(ACID)
1、原子性(Atomicity)
事务是不可分割的工作单位,要么都发生,要么都不发生

2、一致性(Consistency)
事务必须是数据库从一个一致性状态变换到另一个一致性状态

3、隔离性(Isolation)
事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据,对并发的其他事务是隔离的。并发执行的各个事务之间不能相互干扰

4、持久性(Durability)
事务一旦被提交,他对数据库中数据的改变就是永久性的。

2、事务的创建

1、隐式事务:
事务没有明显的开启和结束的标记。比如insert,update,delete语句
隐式地打开了自动提交事务的功能

2、显式事务
前提必须先设置自动提交功能为禁用。set autocommit=0(off),只对当前会话有效

开启显式事务的步骤

1、禁用自动提交set autocommit=0;

2、显式开启事务start transction;//可选

3、编写事务的语句(select,insert,update,delete)

4、结束事务(commit或rollback(回滚))
save point 节点名:设置节点,配合rollback(节点名),回滚到保存点,类似于go

SET autocommit=0;
START TRANSACTION;
UPDATE account SET balance=500 WHERE username='张无忌';
UPDATE account SET balance=1500 WHERE username='赵敏';
COMMIT
3、事务隔离

数据库的4种事务隔离级别
read uncomitted:读未提交数据,可以出现脏读、幻读,不可重复读
read commited:读已提交数据,幻读,不可重复读
repeatable read:可重复读,可幻读
serializable:串行化 ,不可脏读,不可幻读,不可重复度

mysql默认repeatable read

查看隔离级别:
select @@ tx_isolation
设置隔离级别:
set
sesssion | global transaction isoloation level隔离几倍

4、视图

实际上是个虚拟的表,和普通表一样使用,通过表动态生成的数据(实际就是结果集)
视图表只保存了sql逻辑,不保存查询结果。
应用场景:

  • 多个地方用到同样的查询结果
  • 该查询结果使用的sql语句教复杂
CREATE VIEW myview
AS
SELECT stuname,majorname
FROM stuinfo stu
INNER JOIN major mj
ON stu.`majorid`=mj.`id`;

SELECT * FROM myview where stuname like "张%";//这里直接从视图中获取数据
5、视图的创建

语法:
create view 视图名 a 查询语句
案例1、查询姓名中包含a字符的员工名、部门名和工种信息

CREATE VIEW myview
AS
SELECT last_name,department_name,job_title
FROM employees emp
INNER JOIN departments dep
ON emp.department_id=dep.department_id
INNER JOIN jobs jb
ON jb.job_id=emp.job_id;

SELECT * FROM myview WHERE Last_name LIKE "%a%";

案例2、查询各个部门的平均工资级别

CREATE VIEW myviewavg
AS
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id;

SELECT * FROM myviewavg

案例3、查询平均工资最低的部门信息

SELECT * FROM myviewavg ORDER BY ag LIMIT 1

案例3、查询平均工资最低的部门信息

CREATE VIEW myview3
AS
SELECT * FROM myviewavg ORDER BY ag LIMIT 1;
SELECT dep.*,my.ag 
FROM myview3 my
JOIN departments dep
ON my.department_id=my.department.id;
6、视图的修改

方式一:

create or replace view 视图名 
as 
查询语句
CREATE OR REPLACE VIEW myview3
AS
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id

方式二:

alter view 视图名
as
查询语句
ALTER VIEW myview3
AS
SELECT * FROM employees;
7、删除视图
drop view 视图名1,视图名2
8、查看视图

和查看表结构类似

desc view 视图名
9、视图的更新

视图的更新是指更改视图的数据

CREATE OR REPLACE VIEW myview
AS
SELECT last_name,email
FROM employees;
//插入
INSERT INTO myview VALUES("张三","zhangsan@126.com")//视图和原始表里面都会创建该条目
//修改
UPDATE myview SET last_name="张无忌" where last_name="张飞"

//删除
DELETE  FROM myview WHERE last_name="张无忌"
10、不可以更新的视图

1、包含以下关键字的sql语句
分组函数,distinct,group by,having、union或者union all
2、常量视图
以下是常量视图

CREATE OR REPLACE VIEW myview
AS
SELECT "john"  NAME;

3、包含select子查询
4、使用了join
5、from一个不能更新的视图
6、where子句的子查询应用了form子句中的表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值