本文共 3253 字,大约阅读时间需要 10 分钟。
事务是数据库应用中完成单一逻辑功能的操作集合;
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(ROLLBACK)到事务开始前的状态,就像这个事务从来没有执行过一样。
一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账
案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发
多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性。
隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的
隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
– 使用set语句来改变自动提交模式
SET autocommit = 0; /关闭/
SET autocommit = 1; /开启/
– 注意:
— 1.MySQL中默认是自动提交— 2.使用事务时应先关闭自动提交
– 开始一个事务,标记事务的起始点
START TRANSACTION
– 提交一个事务给数据库
COMMIT
– 将事务回滚,数据回到本次事务的初始状态
ROLLBACK
– 还原MySQL数据库的自动提交
SET autocommit =1;
– 保存点
SAVEPOINT 保存点名称 – 设置一个事务保存点ROLLBACK TO SAVEPOINT 保存点名称 – 回滚到保存点
RELEASE SAVEPOINT 保存点名称 – 删除保存点
创建索引
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
CREATE INDEX indexName ON table_name (column_name)
如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。
修改表结构(添加索引)
ALTER table tableName ADD INDEX indexName(columnName)
创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
删除索引的语法
DROP INDEX [indexName] ON mytable;
主键 : 某一个属性组能唯一标识一条记录
特点 :
作用 : 避免同一个表中某数据列中的值重复
与主键索引的区别
作用 : 快速定位特定数据
注意 :
– 我们可以在创建上述索引的时候,为其指定索引类型,分两类
MySQL中无论是Innodb还是MyIsam,都使用了B+树索引结构;
不用二叉查找树:不平衡,可能存在左倾或者右倾,形成一条链表;
不用平衡二叉树:AVL实现平衡的关键在于旋转操作,插入和删除可能会破坏平衡所以需要一次或者多次树旋转来重新平衡,旋转的耗时使得效率很低,维护平衡的代价太高;
不用红黑树:与AVL相比,红黑树查询效率不会降低,但是树的平衡性较低,高度更高,对于数据在磁盘等存储设备中的情况(MySQL),红黑树的过高高度会使IO的次数增加,严重影响性能;
B树:是为磁盘存储而设计的多路平衡查找树,与二叉树相比,树的非叶子节点可以有多个子树,因此B树高度远远小于AVL树和红黑树,磁盘IO次数大大减少;(Mangodb的索引使用了B树结构,MySQL使用B树的变种B+树)
B+树也是多路平衡查找树,其与B树的主要区别在于
1.B树中每个节点(包括叶子和非叶子节点)都存储真实的数据,B+树只有叶子节点存储真实的数据,而非叶子节点存储键;在MySQL中,真实数据可能是行的全部数据(Innodb的聚簇索引),也可能只是行的主键(Innodb的辅助索引),或者是行所在的地址(如MySQL的非聚簇索引);
2.B树中一条记录只会出现一次,不会重复出现,而B+树的键则可能重复出现——在叶子节点中出现,也可能在非叶子节点中重现;
3.B+树的叶子节点之间通过双向链表连接;
4.B+树中的非叶子节点记录数比子节点少1;而B+树中非叶子节点与子节点记录数相同;
B+树相对于B的优势
B+树存在的劣势
键会重复出现,占用更多空间;
转载地址:http://arqzi.baihongyu.com/