前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >事务、视图、锁表

事务、视图、锁表

作者头像
用户9979303
发布2022-10-28 15:37:21
6430
发布2022-10-28 15:37:21
举报
文章被收录于专栏:over文章

1.什么是事务

事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作 多个操作作为一个整体向系统提交,要么都执行、要么都不执行 事务是一个不可分割的工作逻辑单元

转账过程就是一个整体 它需要两条UPDATE语句来完成,这两条语句是一个整体 如果其中任一条出现错误,则整个转账业务也应取消,两个账户中的余额应恢复到原来的数据,从而确保转账前和转账后的余额不变,即都是1001元

2.事务的特性

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

原子性(Atomicity)

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

一致性(Consistency)

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

隔离性(Isolation)

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

持久性(Durability)

事务完成后,他对数据库的修改已被永久保持

3.如何创建事务

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

注意:begin开启事务之后如果没有commit提交的话,在数据库里面查到的数据是修改了的,在cmd中查询数据是没有修改的,需要提交之后才真正修改,没有提交之前可以通过rollback回滚事务还原数据库里面的数据,但如果提交了之后就回滚不了

语法:

(1)开始事务

BEGIN ; 或 START TRANSACTION;

(2)提交事务

COMMIT;

(3)回滚(撤销)事务

ROLLBACK;

4.自动关闭和开启事务

默认情况下,每条单独的SQL语句视为一个事务

关闭默认提交状态后,可手动开启、关闭事务

SET autocommit = 0|1;

关闭/开启自动提交状态

值为0:关闭自动提交 值为1:开启自动提交

关闭自动提交后,从下一条SQL语句开始则开启新事务,需使用COMMIT或ROLLBACK语句结束该事务

事务部分的示例:

代码语言:javascript
复制
create database mybank;

DROP TABLE IF EXISTS BANK;
create table `bank`(
`customerName` varchar(50),
`currentMoney` decimal(10,2)
);
 
 
 insert into bank
 values('张三','1000'),('李四',1);
 
 select * from bank;


/*模拟转账*/
begin;
update bank set currentMoney = currentMoney-500
where customerName = '张三';

update bank set currentMoney = currentMoney + 500
 where customerName = '李四';
 
commit;
 rollback;
 update bank set currentMoney = currentMoney + 500
 where customerName = '张三';

update bank set currentMoney = currentMoney - 500
where customerName = '李四';

/*关闭自动提交事务*/
set autocommit = 0;

/*打开自动提交事务(默认)*/
set autocommit = 1;
代码语言:javascript
复制
事务是指逻辑上的一组操作,组成这组操作的各个单元,要不全成功要不全失败。 
- 支持连续SQL的集体成功或集体撤销。 
- 事务是数据库在数据完整性方面的一个功能。 
- 需要利用 InnoDB 或 BDB 存储引擎,对自动提交的特性支持完成。 
- InnoDB被称为事务安全型引擎。 
-- 事务开启 
START TRANSACTION; 或者 BEGIN; 
开启事务后,所有被执行的SQL语句均被认作当前事务内的SQL语句。 
-- 事务提交

JDX制作17. 锁表

18. 触发器

COMMIT; 
-- 事务回滚 
ROLLBACK; 
如果部分操作发生问题,映射到事务开启前。 
-- 事务的特性 
1. 原子性(
Atomicity) 
事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 
2. 一致性(Consistency) 
事务前后数据的完整性必须保持一致。 
- 事务开始和结束时,外部数据一致 
- 在整个事务过程中,操作是连续的 
3. 隔离性(Isolation) 
多个用户并发访问数据库时,一个用户的事务不能被其它用户的事物所干扰,多个并发事务之间的 
数据要相互隔离。 
4. 持久性(Durability) 
一个事务一旦被提交,它对数据库中的数据改变就是永久性的。 
-- 事务的实现 
1. 要求是事务支持的表类型 
2. 执行一组相关的操作前开启事务 
3. 整组操作完成后,都成功,则提交;如果存在失败,选择回滚,则会回到事务开始的备份点。 
-- 事务的原理 
利用InnoDB的自动提交(autocommit)特性完成。 
普通的MySQL执行语句后,当前的数据提交操作均可被其他客户端可见。 
而事务是暂时关闭“自动提交”机制,需要commit提交持久化数据操作。 
-- 注意
1. 数据定义语言(DDL)语句不能被回滚,比如创建或取消数据库的语句,和创建、取消或更改表或存 
储的子程序的语句。 
2. 事务不能被嵌套 
-- 保存点 
SAVEPOINT 保存点名称 -- 设置一个事务保存点 
ROLLBACK TO SAVEPOINT 保存点名称 -- 回滚到保存点 
RELEASE SAVEPOINT 保存点名称 -- 删除保存点 
-- InnoDB自动提交特性设置 
SET autocommit = 0|1; 0表示关闭自动提交,1表示开启自动提交。 
- 如果关闭了,那普通操作的结果对其他客户端也不可见,需要commit提交后才能持久化数据操作。 
- 也可以关闭自动提交来开启事务。但与START TRANSACTION不同的是, 
SET autocommit是永久改变服务器的设置,直到下次再次修改该设置。(针对当前连接) 
而START TRANSACTION记录开启前的状态,而一旦事务提交或回滚后就需要再次开启事务。(针 
对当前事务) 

5.什么是视图

(1)视图是一张虚拟表

表示一张表的部分数据或多张表的综合数据 其结构和数据是建立在对表的查询基础上

(2)视图中不存放数据

数据存放在视图所引用的原始表中

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

6.视图的用途

筛选表中的行 防止未经许可的用户访问敏感数据 降低数据库的复杂程度 将多个物理数据库抽象为一个逻辑数据库

7.如何创建视图

(1)使用SQL语句创建视图

语法:

create view view_name as <select 语句>;

(2)使用SQL语句删除视图

DROP VIEW [IF EXISTS] view_name;//删除前判断视图是否存在

(3)使用SQL语句查看视图

SELECT 字段1, 字段2, …… FROM view_name;

8.使用视图注意事项

视图中可以使用多个表 一个视图可以嵌套另一个视图 对视图数据进行添加、更新和删除操作直接影响所引用表中的数据 当视图数据来自多个表时,不允许添加和删除数据,一个表时可以进行修改

5.查看所有视图

USE information_schema; SELECT * FROM views\G;

使用视图修改数据会有许多限制,一般在实际开发中视图仅用作查询

示例:

代码语言:javascript
复制
/*创建视图 创建前先判断是否存在,如存在则删除*/
use house;
drop view if exists view_house;
create view view_house
as select * from hos_house;

select * from view_house;
update view_house set copy ='中关村'
where hmid ='1';

/*创建学生成绩表视图*/
use myschooltwo;
drop view if exists view_student_result;
create view view_student_result
as select s.studentName as 姓名,
s.studentNo as 学号,
r.studentResult as 成绩,
so.subjectName as 课程名称,
r.examDate as 考试日期
from student as s
inner join result as r
on s.studentNo = r.studentNo
inner join subject as so
on r.subjectNo = so.subjectNo
order by s.studentNo;

select *,count(*)from view_student_result ;

9.锁表

/* 锁表 */ 表锁定只用于防止其它客户端进行不正当地读取和写入 MyISAM 支持表锁,InnoDB 支持行锁 -- 锁定 LOCK TABLES tbl_name [AS alias] -- 解锁 UNLOCK TABLES

10.什么是索引

汉语字典中的汉字按页存放,一般都有汉语拼音目录(索引)、偏旁部首目录等 我们可以根据拼音或偏旁部首,快速查找某个字词

(1)索引是一种有效组合数据的方式,为快速查找到指定记录

(2)作用 :

大大提高数据库的检索速度 改善数据库性能

(3)MySQL索引按存储类型分类

B-树索引:InnoDB、MyISAM均支持 哈希索引

10.常用索引类型

(1)普通索引

基本索引类型 允许在定义索引的列中插入重复值和空值

(2)唯一索引

索引列数据不重复 允许有空值

(3)主键索引

主键列中的每个值是非空、唯一的 一个主键将自动创建主键索引

(4)复合索引

将多个列组合作为索引

(5)全文索引

支持值的全文查找 允许重复值和空值

(6)空间索引

对空间数据类型的列建立的索引

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2ejj3hrhvv9cg

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档