mysql事务和索引
前言:这次要讲的是mysql的事务和索引。在进行实验之前我们得先对mysql的事务及索引有一定的了解。
一.mysql数据库特性
1.原子性:事务是一个完整的操作,数据必须处于一致的状态,事务中的操作,要么全部成功,要么全部失败,此特性就是原子性;
一致性:当事务执行完毕后,数据必须处于一致状态,在开始事务时数据保持一致状态,执行事务的过程中事务可以出现不一致的情况,事务完毕后,数据必须保证一致状态;
隔离性:多个事务之间互不依靠,互补影响,相对独立;
持久性:事务处理完毕后,在系统中发生的变化是永久性的,会永久的保留在数据库中;
2.管理事务的三个命令:
begin:开始事务,后边有多条数据库操作语句开始执行;
commit:开始提交一个事务,对应前边的begin操作,将事务处理的结果保存到数据文件中;
rollback:开始回滚一个事务,在begin和commit之间,将事务中的全部语句撤回,恢复到执行begin之前的数据状态;
3.数据库索引分类
普通索引:最基本的索引,无唯一性之类的限制;
唯一性索引:索引列中的所有值只能出现一次,如身份证号码列;
主键索引:是一种唯一性夺银,在一个表中创建主键后,则自动创建主键索引;
单列索引和多列索引:可以为单列或者多列,列中可能有重复的值。
大概了解了事务与索引的特性之后,我们就可以来做实验了
二.实操
1.mysql索引视图
先登录mysql
在索引之前我们先创建一个数据库
进数据库(使用它use)
建立包含如下信息的一个表,具体操作及释义可见我上一篇博客,mysql基础操作
然后我们向里面写数据(由于id是自动增长的数值,所以我们定义后面的就行)
可以用desc查看表设置
表中,id那行,auto_increment的意思就是自动增长的数值。
然后create index是创建索引的固定搭配,index_age是针对年龄的索引,on info(age)是针对与表的age列进行的索引。我们这是主键索引
我们可以查询下索引情况
然后删除如下
查询发现索引么得了
还有下面这种索引,唯一索引
还是一样的删除并查看
或者下面这种方式也可以
还有一种索引方式是在我们建立表的时候就建立索引
所以,我们一共有三种方式索引
1:创建表 直接定义
2:create index 索引名称 on 表名(列名1,列名2);
3:alter table 表名 add index 索引名称 (列名);
我们插入如下的数据
再建立一个hob表
查询
给hob插入数据
那现在我们如何将这两个表的信息串联在一起
先将前一个表数据稍作修改,以便后面的操作
inner关联,进行下面操作,将两个表数据关联起来
如果我只想显示名字对应的兴趣爱好
我们还可以简写这些
每一次都这么查询肯定很麻烦,所以我们可以创建视图
数据其实不在这个表中,视图相当于一个映射镜像,就是那种水中月亮的意思。
全文索引是针对于长篇幅的索引
我们来对address建立一个全文索引
还有种叫组合索引
以上就为比较常见的一些索引。
2.mysql事务
我们先对表格插入一些数据
启用事务
再加一个数据
我们给其打一个节点,相当于存档
我们再来插入一个数据
再插入节点
继续插入
查看会有这么多数据
但是通过另一个终端会发现并没有那么多数据,只是原本数据
但是我们刚刚设置了节点,我们可以回滚数据到节点b
回滚到其他节点如下
回滚到最初阶段
如果已经回滚到之前阶段了,就无法再回滚回去。就比如现在已经回滚到最初阶段了,就无法回滚到b节点了(to b 土逼)
那如何提交我们插入的数据,使其他终端也能看到数据呢?
先开启事务
现在另一台终端还是看不到我们插入的田鸡数据的,我们输入提交命令
发现数据可以看到了
还有一种事务的方式,关闭自动提交
我们修改一下田鸡地址南京为北京
本机的地址会改,但是另一台终端查看不会改地址
本机
另一台终端
开启自动提交功能
在查看另一台终端会发现成功查看到数据了,并且会将之前没有提交的一并提交上去
终端
[外链图片转存中…(img-cPAjvdvz-1581588566091)]
开启自动提交功能
在查看另一台终端会发现成功查看到数据了,并且会将之前没有提交的一并提交上去
[外链图片转存中…(img-OujYZ2Go-1581588566092)]