SQL笔记三

本文详细介绍了数据库事务的概念,包括隐式和显式事务的使用,以及如何设置自动提交。重点讲解了事务的四种隔离级别,如脏读、不可重复读和幻读,并给出了实例说明。此外,还讨论了回滚点的使用,如savepoint和事务的回滚操作。最后,阐述了视图的概念、创建与使用,以及视图更新的限制条件。
摘要由CSDN通过智能技术生成

TCL

事务的创建

​ 分为隐式事务:没有明显的开启和结束标记

​ 显式事务:有

set autocommit =0必须先设置自动提交功能为禁止才能进行显式事务的进行

#第一步
set autocommit=0;#设置自动提交功能为禁止
start transaction;#可选的
#第二步编写事务的sql语句(select insert update delete)
#第三步结束事务
/*commit;提交事务#二选一
rollback;回滚事务*/
#案例
SET autocommit=0;
START TRANSACTION;
UPDATE account SET balance=1000 WHERE username='张';
UPDATE account SET balance=1000 WHERE username='找';
#commit;
ROLLBACK;
SELECT * FROM account;

事务的隔离级别

出现并发问题:

脏读:读取了已经无效的字段,如T1改了数据之后,T2在T1事务为结束时,对元素进行修改则T2改的无效

不可重复读:当T1读取字段T2更新了这个字段,T1在读取时发生改变

幻读:主要是针对插入,T1开始事务并要修改前,T2插入了新行,T1则将改已经改的值

select @@tx_isolation;#显示事务的隔离级别
set session transaction isolation level {read uncommitted};#设置隔离级别
set global transaction isolation level {read committed};#设计全局隔离级别
脏读不可重复读幻读
read uncommitted111
read committed(oracle默认级别)011
repeatable read(mysql默认级别)001
serializable000

回滚点

savepoint

SET autocommit = 0;
START TRANSACTION;
DELETE FROM account WHERE id =1;
SAVEPOINT a;
DELETE FROM account WHERE id =2;
ROLLBACK TO a;
#delete
SET autocommit=0;
START TRANSACTION;
DELETE FROM account;
ROLLBACK;
#可以回滚
#truncate
SET autocommit=0;
START TRANSACTION;
TRUNCATE TABLE account;
ROLLBACK;
#无法回滚

视图

虚拟表,和普通表一样使用,通过表动态生成的数据。

临时的

视图基础操作

视图创建修改删除
#创建视图
#语法
/*
create view 视图名
as
查询语句;
*/
#案例
CREATE VIEW myv1
AS
SELECT last_name,department_name,job_title
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j ON j.job_id = e.job_id;#创建
#使用
SELECT * FROM myv1 WHERE last_name LIKE '%a%';
#修改视图
#方式一
create or replace view 视图名
as
查询语句;
#案例
CREATE OR REPLACE VIEW myv3
AS
SELECT AVG(salary),job_id
FROM
employees
GROUP BY job_id;
#方式二
alter view 视图名
as
查询语言;
#案例
ALTER VIEW myv3
AS
SELECT * FROM employees;
#删除视图
drop view 视图名,.....;
#案例
DROP VIEW myv1,myv2;
#查看视图
desc 视图名;
show create view 视图名;
视图的更新

主要看是否在原表中储存数据

以下不允许更新

1.含有关键字的sql语言:分组函数,distinct,group by,having,union或union all

2.常量视图

3.select中包含子查询

4.join,

5.from一个不能更新的视图

6.where子句的子查询引用from子句中表

#插入
INSERT INTO myv1 VALUES("张",'jal');#原始表会同时进行插入
#修改
update myv1 set last_name='zhang' where last_name='张';#原始表会同时进行修改
#删除
DELETE FROM myv1 WHERE last_name='zhang';#原始表会同时进行修改

创建占用物理空间使用增删改
视图create view只保存sql逻辑可,但是可能无法使用
create table保存数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值