数据库事务和索引

事务的性质:

  原子性:同一个事务中的所有操作要不然全部成功要不然全部失败

  一致性:一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

  隔离性:隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

 持久性:持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的

不考虑事务的隔离性会出现的问题:

  脏读:脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。

  不可重复读:不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。

  虚度:例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。

事务的隔离级别:

  Serializable (串行化):可避免脏读、不可重复读、幻读的发生

  Repeatable read (可重复读):可避免脏读、不可重复读的发生

  Read committed (读已提交):可避免脏读的发生

  Read uncommitted (读未提交):最低级别,任何情况都无法保证

索引

数据库中索引的作用是用来加快查找速度,原理是将表中建立索引列的数据独立出来用特殊的数据结构存储,(如B-Tree,Hash),数据库实现通常使用B树和B+树

   索引相当于字典的目录,可以通过查找目录来得到我们所需要的数据所在的位置,而不需要翻整本字典.

使用索引需要注意的问题

  索引会带来额外的开销,额外的存储空间,额外的创建时间,额外维护时间,所以要选择适合的情况去建立索引

索引的类型

    1. 普通索引:普通索引允许被索引的数据列包含重复的值。

    2. 唯一索引:被索引包含的数据列不允许有相同的值, 可以包含null     

    3. 主键索引:主键创建的索引,唯一且不能为空,

    4. 全文索引(mysql):

    5. 聚集索引 : 该索引中键值的逻辑顺序决定了表中相应行的物理顺序。 (比如字典的按照拼音查询    逻辑顺序和物理顺序一致),一个表中只能有一个聚集索引

      6. 非聚集索引 :  该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。(比如字典中的按部首查询    一个字可能在54页有可能在554页)(mysql中没有)

适合建立索引的字段:

  1. 经常搜索

    2. 经常排序

    3. 经常跟在Where语句后面

    4. 数据类型小

    5. 简单数据类型

    6. 列中尽量避免null

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

Hadoop数据分析平台实战——130Hive Shell命令介绍 02(熟悉Hive略过)离线数据分析平台实战——130Hive Shell命令介绍 02(熟悉Hive略过)

离线数据分析平台实战——130Hive Shell命令介绍 02(熟悉Hive略过) 导入数据 Hive的导入数据基本上可以分为三类, 第一种是从linux系...

2725
来自专栏MySQL实战分享

MongoDB第四期:SQL 与 MongoDB 映射(入门)

传统的关系数据库一般由数据库、表、记录三个层次概念组成,MongoDB是由数据库、集合、文档对象三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没...

2942
来自专栏aoho求索

MySQL探秘(二):SQL语句执行过程详解

 昔日庖丁解牛,未见全牛,所赖者是其对牛内部骨架结构的了解,对于MySQL亦是如此,只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化...

1411
来自专栏我的博客

PHP Mysql函数汇总表

mysql_affected_rows — 取得前一次 MySQL 操作所影响的记录行数mysql_change_user —  改变活动连接中登录的用户mys...

3515
来自专栏大眼瞪小眼

面试-MySQL总结

2NF:每一个非主属性完全依赖于候选码(属性组的值能唯一的标识一个元组,但是其子集不可以)。

853
来自专栏存储技术

MySQL加锁范围分析

最近,遇到了一个关于mysql 加锁的问题,将当时的情形简化如下,有一个index_test表,表结构如下所示:

3646
来自专栏好好学java的技术栈

玩转springboot:整合mybatis实例

这篇文章讲解一下springboot整合mybatis,其实,springboot整合mybatis和springmvc整合mybatis并没有什么太大的区别,...

793
来自专栏深度学习之tensorflow实战篇

Mongodb在查询某个字段是否存在,执行删除字段,python中排序和创建索引

查询字段是否存在 查询course表中,存在lectures_count字段的记录信息 db.course.find( { “lectures.lectur...

5498
来自专栏木头编程 - moTzxx

后台 配置页面功能设计

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

2854
来自专栏数据和云

【动手实践】Oracle 12.2 新特性:自动的列表分区创建

2017年来了,我们要启动新的学习征程了。在过去我们一直思考,什么样的内容能够更帮助大家了解和学习到有用的知识? 这个『动手实践』栏目就是这样一个改进和尝试吧,...

2826

扫码关注云+社区