MySQL的事务处理
比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
MySQL 事务主要用于处理操作量大,复杂度高的数据
只支持引擎为InnoDB和BDB的数据表
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
ACID 属性(事务必须具备的四个属性)
原子性
一个事务中的所有操作,要么全部完成,要么全部不完成,不会在中间某个环节结束
一致性
在事务开始之前和事务结束之后,数据库的完整性没有被破坏。
隔离性
防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性
事务处理结束后,对数据的修改就是永久的,即使系统故障也不会丢失。
set autocommit
set autocommit = 0;关闭自动提交模式
set autocommit = 1;开启自动提交模式(默认)
使用事务前应该先关闭自动提交(set autocommit = 0)
MySQL的事务实现方法
start transaction 开始事务
commit 提交事务
rollback 事务回滚,数据回到本次事务的初始状态
事务处理步骤
set autocommit = 0——start transaction——增删改等事务——commit /rollback ——set autocommit = 1
数据库索引
提高查询速度
确保数据的唯一性
对全文检索字段进行搜索优化
主键索引(PRIMARY KEY)
确保数据记录的唯一性
确定特定数据记录在数据库中的位置
主键索引只能有一个
唯一索引(UNIQUE)
唯一索引可以有多个
避免同一个表中某数据列中的值重复
常规索引(INDEX)
快速定位特定数据
全文索引(FULLTEXT)
快速定位特定数据
只能用于引擎为myisam类型的数据表
只能用于类型为char,varchar,text的数据列
创建索引
alter table 表名 add 索引类型(数据列名)
create 索引名 on 表名 (列名)
删除索引
drop index 索引名 on 表名
alter table 表名 drop index 索引名
alter table 表名 drop paimary key
查看索引
show index(或keys) from 表名
索引准则
索引不是越多越好
不要对经常变动的数据加索引
小数据量的表建议不要加索引
索引一般应加在查找条件的字段