数据库笔记之索引和事务

索引:
在未创建索引之前,数据库里的数据是按照堆来存储的,当我们使用index关键字创建索引时,其在内存中将会变为B树来存储。默认创建的索引类型是非聚焦索引,当使用关键字clustered创建聚焦索引。一个表只能有一个聚焦索引,可以有多个非聚焦索引。
聚集索引决定了表数据的物理存储顺序,也就是说表的物理存储是根据聚集索引结构进行顺序存储的,因此一个表只能有一个聚集索引。
除了聚集索引以外的其他索引,都称之为非聚集索引,非聚集索引一般都是为了优化特定的查询效率而创建的。


索引和主键的区别:1:主键是为了标识数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引.2:数据表中只允许有一个主键,但是可以有多个索引.3.使用主键,数据库会自动创建主键索引(默认下是聚焦索引),也可以在非主键上创建索引,方便查询效率.
可以在主键上设置为非聚集索引,在其余的列上设置为聚集索引。
唯一索引是指在该列中不能存储重复的值。

索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。索引很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

事务
事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上个节点。事务的四个属性:ACID。即原子性,一致性,隔离性和持久性。
脏读: update table set X = X + 10 where col = A;
update table set X = X - 10 where col = B;
假设此时执行完了第一个sql语句,此时数据库里面做了更新。用户可以看到效果,但是由于某种原因,第二个sql语句执行失败了,事务回滚此时用户就会看到原来的效果,这就是脏读。
事务隔离级别中的READ COMMITED可以解决脏读现象(使用的是共享锁),根据其名就可以看得出:提交完读
事务还有其余的三种隔离级别,在这里就不说了。


锁的粒度有哪些?
数据库锁:锁定整个数据库,这通常发生在整个数据库模式改变的时候。
表锁:锁定整个表,这包含了与该表相关联的所有数据相关的对象,包括实际的数据行(每一行)以及与该表相关联的所有索引中的键。
区段锁:锁定整个区段,因为一个区段由8页组成,所以区段锁定是指锁定控制了区段、控制了该区段内8个数据或索引页以及这8页中的所有数据行。
页锁:锁定该页中的所有数据或索引键。
行或行标识符:虽然从技术上将,锁是放在行标识符上的,但是本质上,它锁定了整个数据行。

posted @ 2018-05-02 20:59  又见阿郎  阅读(462)  评论(2编辑  收藏  举报