一、索引
1.主键索引,主键自动的为主索引(类型为primary key)
2.唯一索引(unique)
3.普通索引(index)
4.全文索引(fulltext)
1.创建索引
2.删除、修改、查找索引
3.索引的用处
1.较频繁的作为查询条件字段应该创建索引
2.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件,也不适合
3.更新非常频繁的字段不适合作为索引
4.不会出现在where字句中的字段不该创建索引(不会用来作为查询条件的字段,不该创建索引)
二、事务定义
1.概念:事务用于保证数据的一致性,它由一组相关的dml(增删改)语句组成,该组的dml语句要么全部成功,要么全部失败。如:转账就是 就是要用事务来处理,用以保证数据的一致性。
2.事务和锁:当执行事务操作时(dml语句),mysql会在表上加锁,防止其它用户修改表的数据,这对用户来讲非常重要。
3.回退事务:在介绍回退事务前,先介绍一下保存点(savepoint).保存点是事务中的点.用于取消部分事务,当结束事务时(commit)会自动的删除该事务所定义的所有保存点。当执行回退事务时,通过指定保存点可以回退到指定的点
4.提交事务:使用commit语句可以提交事务.当执行了commit语句子后,会确认事务的变化、结束事务、删除保存点、释放锁,数据生效。当使用commit语句结束事务子后,其它会话[其它连接]将可以查看到事务变化后的新数据[所有数据就正式生效。
事务细节
1.如果不开始事务,默认情况下,dml操作是自动提交的,不能回滚
2.如果开始一个事务,没有创建保存点。可以执行rollback,默认就是回退到事务开始的状态。
3.可以再事务中(还没有提交时),创建多个保存点
4.可以在事务提交之前,选择回退到哪个保存点
5.mysql的事务机制需要innodb的存储引擎才可以使用,myisam不支持
6.开始一个事务start transaction或者set autocommit=off
三、隔离级别
1.定义
1.概念:多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接再获取数据时的准确性。
2.如果不考虑隔离性,可能会引发如下问题:
脏读:当一个事务读取另一-个事务尚未提交的改变(update,insert,delete)时,产生脏读
不可重复读:同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生不可重复读。
幻读:同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读。
2.四种隔离级别
3.设置隔离级别
1查看当前会话隔离级别 SELECT @@tx_isolation
2查看系统当前隔离级别 SELECT @@global.tx_isolation
3设置当前会话隔离级别 SET SESSION TRANSACTION ISOLATION LEVEL [级别]
4设置系统当前隔离级别 SET GLOBAL TRANSACTION ISOLATION LEVEL [级别]
5.mysql默认的事务隔离级别是repeatable read,一般情况下,没有特殊要求,没有必要修改,(该级别可以满足绝大部分项目需求)6.修改默认的(系统的)隔离级别:在MySQL的my.int配置文件中,在文件最后加上
#设置默认的隔离级别
transaction-isolation=READ-UNCOMMITTED(READ-COMMITTED,SERIALIZABLE,REPEATABLE-READ(默认的))。
四、MySQL事务ACID特性
1.原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2.一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
3.隔离性(lsolation):多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
4.持久性(Durability):一个事务一旦被提交,它对数据库中数据的改变就是永久性的接下来即使数据库发生故障也不应该对其有任何影响。