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子句中的表