MySql中事务、事务的隔离级别、数据库锁、索引、视图
事务:事务是一个逻辑工作单元,这个逻辑工作单元包含所有的操作。
一、事务的特征:
1.原子性:事务中的所有操作不可再分,所有操作要么全部成功,要么全部失败。
2.一致性:事务操作之前是一种状态,操作之后是一种状态,但是数据库系统的一致性保持不变。
3.隔离性:多个事务共同进行操作时,他们的操作过程是隔离的。即任何一个事务在操作过程中,其它事务操作不能看到其操作过程。
4.持久性:事务一旦提交,则对数据库的影响是持久性的,不能撤销(回滚)。
二、事务的隔离级别
隔离的前提概念:
1.脏读:一个事务读取到了其它事务操作过程中的数据,这种现象叫做“脏读”,读取到的数据叫做“脏数据”。
2.不可重读(现象):在一个事务中两次读取到的数据不一致的现象,叫做不可重读。
3.幻读:两次读取到的记录数量不一致的现象。
隔离级别:
1.读未提交隔离级别(read uncommitted):可以读取到其它事务未提交的数据,可能发生脏读、不可重读、幻读。
2.读提交级别(read committed):只能读取到其它事务已经提交的数据,可能发生不可重读、幻读。
3.可重读级别(repeatable read):--------------->mysql默认的隔离级别
在一个事务中多次读取到的数据值是相同的。
注:在mysql的InnoDB存储引擎已经解决了幻读现象。
4.序列化(串行化)隔离级别(Serializable)
事务在序列化隔离级别下,普通的执行select查询操作语句也会加“读锁”。
三、数据库锁
1.数据库锁分为“读锁”(共享锁)和“写锁”(排它锁)。
“读锁”与“读锁”可以兼容共享,但是与“写锁”排斥。“写锁”与“读锁”和其它“写锁”都排斥。
2.手工加锁方式:
手工添加“读锁”方式:select 字段名... from 表名称 【where 条件】 lock in share mode;
手工添加“写锁”方式:select 字段名... from 表名称 【where 条件】 for update;
四、索引(index)
------->索引可以分为普通索引(index),唯一索引(unique index),主键索引(primary index),全文索引(fulltext index)
索引中存储的索引字段值与其对应的逻辑指针(记录具体所在位置)。
索引可以显著地提高查询效率,但是应该在数据量较多地表中使用,因为索引本身也要占据空间,尽管它能提高查询效率,但是相应因为占用内存,会降低数据地加载效率,所以说索引并不是越多越好。
创建索引语法:
普通索引:create index 索引名 on 表名称(字段名);
创建唯一索引:create unique index 索引名称 on 表名称(字段名);
查看索引:show index from 表名称;
删除索引:delete index 索引名 from 表名称;
五、视图
可以将视图看作一张虚拟表,用来封装查询语句。
create 【or replace】 view 视图名称 as select 语句;