MySQL 事务及视图的总结归纳

事务

什么是事务?

事务(Transaction)是作为单个逻辑工作单位执行的一系列操作

多个操作作为一个整体向系统提交,要么都执行,要么都不执行

事务是一个不可分割的工作逻辑单元

例如:在银行转账的过程就是一个整体,这是需要使用update语句来完成,这两条语句中如果有一个出现错误,整个转账过程也会取消,因为它们这两条语句是一个整体,不能拆分开来,所以两个账户的余额都应该会恢复到原来的数据,确保转账前和转账后的余额不变

示例 :张三转账给李四

#张三的账户少500元,李四的账户多500元
update bank set currentMoney=currentMoney-500 where customerName="张三";
update bank set currentMoney=currentMoney+500 where customerName="李四";

事务发生异常,则回滚(rollback)到最初的状态;

还有一种可能就是 提交(commit)事务,提交语句之间执行的所有数据更新将永久的保存在数据库的文件中;

这两个事务中都有各自的好处所在,回滚可以恢复到开始的状态,提交可以永久保存更新的数据

 

事务必须具备四个属性,简称为ACID

1.原子性(Atomicity)

事务是一个完整的操作,事务的各元素都是不可分的(原子的),要么都执行,要么都不执行;

2.一致性(Consistency)

当事务完成时,数据必须处于一致状态;

3.隔离性(Isolation)

并发事务之前彼此隔离,独立,它不应以任何方式依赖于或影响其他事务;

4.持久性(Durability)

事务完成后,它对数据库的修改都会被永久保持;

 

如何执行事务

MySQL中支持事务的存储引擎有InnoDB和BDB

1.执行事务的语法:

SQL使用下列语句来管理事务

(1)开始事务  begin 或start transaction

(2)提交事务  commit

(3)回滚(撤销)事务  rollback

示例:从张三的账户转出500元,并且存入到李四的账户里

#使用mybank数据库
use mybank;
#开始事务(指定事务从此处开始,后续的SQL语句是一个整体)
BEGIN;
#转账:张三的账户减少500元,李四的账户增加500元
update bank set currentMoney=currentMoney-500 where customerName="张三";
update bank set currentMoney=currentMoney+500 where customerName="李四";
#提交事务,写入硬盘,永久的保存
COMMIT;

2.设置自动提交关闭和开启

MySQL中默认是开启自动提交,没指定开启事务时,每条SQL语句都单独的事务执行完毕自动提交。可以关闭自动提交的模式,可以手动提交或回滚事务。

语法:关闭/开启自动提交状态  set autocommit=0/1

值为0:关闭自动提交

值为1:开启自动提交

注意:关闭自动提交后,从下一条SQL语句开始则开启新事务,需要使用commit或rallback语句结束该事务。

#关闭事务自动提交,该语句之后为事务的开始
set autocommit=0;
#转账:张三的账户减少500元,李四的账户增加500元
update bank set currentMoney=currentMoney-500 where customerName="张三";
update bank set currentMoney=currentMoney+500 where customerName="李四";
#提交事务,写入硬盘,永久的保存
commit;


#恢复自动提交
set autocommit=1;
update bank set currentMoney=currentMoney-1000 where customerName="张三";

 

视图

什么是视图?

视图是一张虚拟表;

视图是另一种查看数据库中一个或多个表中数据的方法;

表示一张表的部分数据和多张表的综合数据,结构和数据建立在对表的基础上

视图它是不存放数据的,数据存放在视图所引用的原始表中

一个原始表,根据不同用户的需求,可以创建不同的视图

 

如何创建和使用视图?

1.使用SQL语句创建视图

语法:create view 视图名 as <select 语句>;

create view view_grade_sex as
select * from student
where gradeID=1 and sex="女"; 

还可以与其他的表联合查询

select r.* 
from result r
inner join view_grade_sex v
on v.studentNo=r.studentNo

注:在创建视图之前,如果在数据库中已存在同名的视图的话,需要先删除在创建视图;

2.使用SQL语句删除视图

语法:drop view [if  exists]视图名

注:if  exists 指的是删除前判断是否存在该视图

例如:

#先判断是否存在名为view_grade_sex的视图
drop view if exists view_grade_sex;

#存在则删除,并且创建一个视图
create view view_student as
select studentNo,studentName,phone 
from student

3.使用SQL语句查看视图的数据

语法:select 字段1,字段2 ,…… from view_name;

#查看view_student视图的数据
select * from view_student;

4.使用视图的注意事项:

(1)每个视图中可以使用多个表;

(2)与查询相似,一个视图可以嵌套另一个视图,最好不要超过三层;

(3)对视图数据进行添加、更新和删除操作直接引用表中的数据;

(4)当视图数据来自多个表时,不允许添加和删除数据

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值