在前面已经总结了关于多表查询的相关内容,本次主要对索引与事务进行总结。
表的内连和外连:
内连接:内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开
发过程中使用的最多的连接查询。
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;
分为左外连接和右外连接
左外连接:如果联合查询,左侧的表完全显示我们就说是左外连接。
右外连接:如果联合查询,右侧的表完全显示我们就说是右外连接。
select 字段 from 表名1 right join 表名2 on 连接条件;
索引:
提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确
的‘create index’,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,查询速度的提高是以插
入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以他的价值,在于提高一个海量数
据的检索速度。
常见索引分为:主键索引(primary key),唯一索引(unique),普通索引(index),全文索引(fulltext)--解
决中子文索引问题。
实例如下:
创建主键索引(三种方式):
主键索引的特点:
1. 一个表中,最多有一个主键索引,当然可以使符合主键
2. 主键索引的效率高(主键不可重复)
3. 创建主键索引的列,它的值不能为null,且不能重复
4. 主键索引的列基本上是int
唯一键索引:
唯一索引的特点:
1. 一个表中,可以有多个唯一索引
2. 查询效率高
3. 如果在某一列建立唯一索引,必须保证这列不能有重复数据
4. 如果一个唯一索引上指定not null,等价于主键索引
普通索引的创建:
普通索引的特点:
1. 一个表中可以有多个普通索引,普通索引在实际开发中用的比较多
2. 如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引
全文索引的创建
当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。MySQL提供全文索引机制,但是有要求,要求
表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。
查询索引:
删除索引:
方法1: 删除主键: alter table 表名 drop primary;
方法2: 其他索引的删除:alter table 表名 drop index 索引名;
方法3 : drop index 索引名 on 表名
创建索引的原则:
比较平凡作为查询条件的字段应该创建索引;
唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;
更新非常频繁的字段不适合作创建索引;
不会出现在where子句中的字段不该创建索引。事务:
事务就是一组dml语句组成,这些语句在逻辑上存在相关性,这一组dml语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据时不相同的。
1、开始一个事务:
2、开启事务,保存节点:
3、事务,回滚到原来的状态:
4、事务,回滚到事务的开始:
事务的特性:
1. 原子性(Atomicity):
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2. 一致性(Consistency):
事务必须使数据库从一个一致性状态变到另外一个一致性状态。
3. 隔离性(Isolation):
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据
所干扰,多个并发事务之间要相互隔离。
4. 持久性(Durability):
持久性是指一个事务一旦被提交,它对数据库中的数据的修改就是永久性的,接下来即使数据库发生故障也
不应该对其有任何影响。