事物,索引,视图

一,事物

1.事务概念

事务(Transaction),是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

2.事务基本原理

基本原理:mysql允许将事务统一进行管理(存储引擎innodb),将用户所作的操作暂时保存起来不直接放到数据表中(更新),等到用户确认结果之后再进行操作。

事务在mysql通常是自动提交,但是也可以使用手动提交。

事务特性(4种):

原子性 (atomicity):强调事务的不可分割.操作这些指令时,要么全部执行成功,要么全部不执行,只要其中一个指令执行失败,所有的执行都执行失败,数据进行回滚,回到执行指令前的数据状态。

一致性 (consistency):事务的执行的前后数据的完整性保持一致.

隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰。比如操作同一张表是,数据库为每个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。要达到这么一种效果,对于任意两个并发的事务t1和t2,在事务t1看来,t2要么在t1开始之前就已经结束了,要么在t1结束之后再开始,这样每个事务都干净,没有其他事务在并发的执行。

持久性(durability) :事务一旦结束,数据就持久到数据库,他对于数据的改变是永久性。

3.自动事务

自动事务:auto commit 当客户端发送一条sql指令(写操作:增、删、改)给服务器的时候,服务器在执行之后,不用等待用户反馈结果,会自动将记过同步到数据库。

证明:利用两个客户端访问同一个数据库,一个客户端执行sql指令,另一个查看结果

关闭自动事务:关闭之后,系统将不会帮助用户自动提交结果

set autocommit=off;

-- 客户端关闭了自动事务
-- 插入数据:
insert into my_class VALUES (110,'警察班');

select * from my_class;

在 2客户端上查询不到结果,在 1客户端上可以查询,虽然没有同步,但是系统会自动根据事务日志中,查询到已经修改后的表的数据,加工过的。

一旦自动事务关闭,需要用户提供是否同步的命令。

Commit 提交 ,同步到数据表,事务日志就被清空了。

Roll back 回滚 清空之前操作,事务日志也被清空。

通常不会关闭自动事务,太麻烦了,因此在需要使用特殊事务处理的时候才会进行手动事务。

insert into my_class VALUES (110,'警察班');

select * from my_class;

commit;

insert into my_class VALUES (120,'医生班');

ROLLBACK;

4.手动事务

手动事务:不管是开始还是过程还是结束,都需要用户(程序员)手动发送事务操作指令来实现。

手动事务对应的命令:

  1. start transaction :开启事务,从这条语句开始,后面的所有语句都不会直接写入到数据表,保存到事务日志中
  2. 事务处理:多个些的指令
  3. 事务提交:commit 提交 rollback 回滚 到这个时候所有的事物才会结束,要么全部写入,要么全部清空。

开启事务

Start transaction

执行事务

将多个连续的但是是一个整体的sql指令逐一执行

事务操作:

-- 新增数据
insert into my_class VALUES (120,'医生班');

-- 修改数据
update my_student set class_id=120 where stu_name='rose';

提交事务

确认提交:commit

归滚操作:rollback

start TRANSACTION;

insert into my_class VALUES (120,'医生班');

update my_student set class_id=120 where stu_name='rose';

ROLLBACK;

5.回滚点

回滚点:save point 当系统有一系列事务操作时,其中的部分步骤如果成功了,没有必要全部重新来过,可以在某个点设计一个记号,回滚点,然后后面如果失败了,那么可以回到这个标记记号的位置。

增加回滚点:save point 回滚点名字  //字母 数字和下划线构成

回滚到回滚点:rollback to 回滚点名字 //回滚之后的操作就没有了失效了

如果有多个步骤,可以设置多个回滚点,但是如果回到了最前面的回滚点,后面的回滚点就失效了。

start TRANSACTION;  //再次开启事务

insert into my_class VALUES (119,'火警班');  //插入数据

SAVEPOINT sp1;   //增加回滚点

update my_student set class_id=119 where stu_id='9999999'; //出现错误步骤 修改错了

ROLLBACK to sp1;  //回滚到回滚点

commit;   //提交

二,索引

1.索引意义

Mysql索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索效率。

拿汉语字典的目录打比方,我们可以 按照拼音、笔画、偏旁部首等排序的目录(索引)快速的找到需要的字。

索引是应用在sql查询语句的条件,一般为where子句的条件。

2.索引分类

单列索引:即一个索引只包含单个列,一个表可以有多个单列索引。

普通索引:mysql中的基本索引类型,没有什么限制,允许在定义索引的列中插入重复的值和空值,纯粹的为了查询数据更快。

唯一索引:索引列的值必须是唯一的,但是允许为null

主键索引:是一种特殊的唯一 索引,不允许值为null

组合索引(了解):即一个索引包含多个列

3.索引的操作

创建索引

语法:create index 索引名 on 表名 (字段名 数据类型)

create UNIQUE index aa on my_student(stu_name);

查看索引

show index from my_student;

修改索引

Alter table 表名 add (索引名) (字段名 数据类型)

删除索引

Drop index 索引名 on 表名;

三,视图

1.创建视图

视图的本质是sql指令(select语句)

基本语法:create view 视图名字 as select 指令; //可以是单表数据也可以是连接查询联合查询或者是子查询

查看视图结构,视图本身是虚拟表,所以一般关于表的操作都适用于视图。

create view student_class_v as

select s.*,c.class_name from my_student s LEFT join my_class c

on s.class_id=c.class_id;

注意:连接查询的时候避免重复字段

create view student_class_v as

select s.*,c.class_name from my_student s LEFT join my_class c

on s.class_id=c.class_id;

select * from student_class_v;

select stu_name,class_name from student_class_v;

2.使用视图

 视图是一张虚拟表,可以直接把视图看作表来操作,但是视图本身没有数据,是临时执行select语句得到的对应结果,主要用于查询操作。

基本语法:select 字段列表 from 视图名字 各种子句;

3.修改视图

 本质是修改视图对应的查询语句

 基本语法:alter view 视图名字 as select 指令;

4.删除视图

 基本语法:drop view 视图名字;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqq00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值