事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。
事务的属性:
原子性:事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生;
一致性:事务必须使数据库从一个一致状态变换到另外一个一致状态;
隔离性:一个事务的执行不受其他事务的干扰;
持久性:一个事务一旦被提交,它对数据库的改变就是永久的。
事务的创建
隐式事务:事务没有明显的开启和结束。
显式事务:设置提交功能为禁用,事务具有明显的开启和结束的标记
步骤1:开启事务
set autocommit=0;
start transaction;# 可以省略
步骤2:编写事务中的sql语句
语句1;
语句2;
步骤3:结束事务
commit;或者rollback;
数据库的隔离级别
对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采用必要的隔离机制,就会导致各种并发问题:
脏读:对于两个事务T1、T2,T1读取了已经被T2更新但还没有被提交的字段。之后,若T2回滚,T1读取的内容就是临时且无效的。
不可重复读:对于两个事务T1、T2,T1读取了一个字段,然后T2更新了该字段。之后,T1再次读取同一个字段,值就不同了。
幻读:对于两个事务T1、T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行。之后,若T1再次读取同一个表,就会多出几行。
视图
从mysql5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。
创建视图:
1 | /* |
好处:
1.重用sql语句
2.简化复杂的sql操作,不必知道它的查询细节
3.保护数据,提高安全性
删除视图:drop view 视图名1,视图名2,…
视图与表的区别:
视图只是保留了sql逻辑,没有保存数据,虽然可以增删改查,但是一般只作查询使用。
索引的分类
索引是帮助数据库高效获取数据的数据结构。建立索引时会将数据排序,类似于图书的目录,根据目录中的索引查找到对应的页码。
分为:
- 主键索引(primary key)
- 唯一的标识,主键不可重复,只能由一个列作为主键
- 唯一索引(unique key)
- 避免重复列的出现,唯一索引可以重复,多个列都可以标识为唯一索引
- 常规索引 (key/index)
- 默认的
- 全文索引(fulltext)
- 特定的数据库引擎才有
创建索引的三种方式
方式一:创建表的时候
1 | CREATE TABLE user( |
方式二:使用alter table命令,创建普通索引、UNIQUE索引或PRIMARY KEY索引。
1 | ALTER TABLE table_name ADD INDEX index_name (column_list); |
方式三:使用create index命令,增加普通索引或unique索引
1 | CREATE INDEX index_name ON table_name (column_list); |
索引在数据小的时候,作用不大,但是在数据大时,区别十分明显
索引原则
- 索引不是越多越好
- 不要对经常变动的数据添加索引
- 小数据不需要添加索引
- 索引一般加在常用来查询的字段上