事务
什么是事务(Transaction)
事务是多条SQL语句同时执行。如果其中有出错,则全都被取消。
事务的原则(ACID)
-
原子性(atomicity)
一个事务是一个不可分割的工作单位,事务所有操作要么都做,要么都不做,不能停滞在中间某个环节。事务执行过程中出错,则会发生回滚操作。
-
一致性(consistency)
事务必须保持系统一致性状态。以转账为例,假如有两个账户,每个账户100元,总额200元,无论这两个账户之间发生怎样的交易,比如A账户转账给B账户5元,B账户转账给A账户10元,两个账户总额还是200元。这就体现了一致性。
-
隔离性(isolation)
针对多个用户同时操作,主要排除当前事务对其他事务的影响。
-
持久性(durability)
持久性也称永久性(permanence),事务结束后的数据不随外界因素导致数据丢失。若事务没有提交则恢复到原状,反之则持久化到数据库。事务提交不可逆。
事务的隔离级别:
脏读:一个事务读取到了另一个事务未提交的数据操作结果。这是相当危险的,因为很可能所有的操作都被回滚。
不可重复读:一个事务对同一行数据重复读取两次,但是却得到了不同的结果。包括虚读和幻读。
索引
什么是索引(index)
索引是帮助MySQL高效获取数据的数据结构。索引相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
索引的作用
- 提高查询速度
- 确保数据的唯一性
- 构建表与表的之间的连接,实现表与表之间的参照完整性
索引的分类
- 主键索引 (Primary Key)
主键:某个属性(列)能被唯一标识,不重复。
create table `student`(
`id` int(6) primary key,
`name` varchar(3)
)
--或 create table `student`(
`id`int(6),
`name` varchar(3),
primary key(`id`)
)
2.唯一索引 (Unique)
避免与同一个表中某属性的值重复。可能有多个。
create table `student`(
`id` int(6) primary key,
`name` varchar(3) not null unique
--或 unique key `name`(`name`)
)
3.常规索引 (Index)
快速查找数据
create table `student`(
-- 省略一些代码
index/key `ind` (`studentNo`,`subjectNo`) -- 创建表时添加
)
-- 创建后添加
alter table`result` ADD INDEX `ind`(`studentNo`,`subjectNo`);
4.全文索引 (FullText)
百度/谷歌搜索:全文搜索,能快速查找数据,适合大型数据查找
方法:ALTER TABLE在已存在的表上创建索引
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX
索引名 (字段名[(长度)] [ASC |DESC]) ;
--alter table `student` ADD FULLTEXT INDEX `studentname` (`StudentName`);
索引的准则
-
索引不是越多越好
-
不要对经常变动的数据加索引
-
小数据量的表建议不要加索引
-
索引一般应加在查找条件的字段