MySQL的多表查询,事务处理以及索引

多表连接查询,事务处理以及索引


内连接

  • 数据表的连接查询比较常用的有内连接和外连接查询两种。我们先来介绍下内链接查询,是通过INNER JOIN … ON 关键字实现的;具体语法如下:

  • SELECT field1,field2,…fieldn from table_name INNER JOIN join_table ON join_condition;

  • 这里注意的是on后面其实跟的就是外键约束中相对应的两个列名!

外连接

  • 外连接分2种,左连接和右连接;它们用法上一样一样的,查询逻辑上互为相反;具体语法如下:

  • SELECT field1,field2,…fieldn from table_name LEFT|RIGHT JOIN join_table ON join_condition;

  • 左连查询和右连查询的区别是,以执行语句中的哪个表为主表,

  • 所谓主表即以主表为准,主表中有的数据才显示,主表中没有的数据即使附表中有也不显示在结果中!

一张图看懂 内外 左右连接查询的区别

MySQL的多表查询,事务处理以及索引_第1张图片

子查询

  • 对了连接查询确实能将两张表格同时查询输出,但有是我只是想用一张表的数据作为条件去查另一张表,我们需要用到子查询了;我们一起来看下面这条查询语句:select * from table_a where sal >- (select sal from table_b where name = ‘TomCat’);

  • 这其实就是一条简单的子查询语句,先从b表中查询出tomcat的售价,那括号内的查询结果一定是单行单例的一个值了,那么再通过这个值去查询出售价大于这个值的所有商品;注意:这里的返回值必须是单行单例的值!

  • 单行多列怎么查?再来看下面这条查询语句:

  • select * from table_a where (sal,name) = (select sal,name from table_b where name = ‘TomCat’);

  • 先从b表中查询出tomcat的售价,输出的结果有2个列属于单行多列,分别是售价和名字,那么再通过这两个值去查询和这两个值相等的所有商品;注意:这里的返回值和查询的列名顺便必须一致!

子查询

  • 单列多行:

  • select * from table_a where sal IN (select sal from table_b;); //查询结果在返回字段结果内的select * from table_a where sal NOT IN (select sal from table_b;);//查询结果不在返回字段结果内的 select * from table_a where sal >=ANY (select sal from table_b;); //查询结果在返回字段结果内任意满足 select * from table_a where sal >=ALL (select sal from table_b;); //查询结果在返回字段结果内全部满足

MySQL的事务处理

  • List item 事务就是将一组SQL语句放在同一批次内去执行

  • 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行

  • 注意:

    • MySQL事务处理只支持InnoDB和BDB数据表类型

事务的ACID原则MySQL的多表查询,事务处理以及索引_第2张图片

MySQL的事务实现方法

SET AUTOCOMMIT

  • 使用SET语句来改变自动提交模式

  • SET AUTOCOMMIT = 0; # 关闭自动提交模式SET AUTOCOMMIT = 1; # 开启自动提交模式

  • 注意!

  • MySQL中默认是自动提交

  • 使用事务时应先关闭自动提交

◆START TRANSACTION

◼开始一个事务,标记事务的起始点

◆COMMIT

◼提交一个事务给数据库

◆ROLLBACK

◼将事务回滚,数据回到本次事务的初始状态

◆SET AUTOCOMMIT = 1;

◼还原MySQL数据库的自动提交

MySQL的多表查询,事务处理以及索引_第3张图片

数据库索引

◆作用:

  • ◼提高查询速度
    ◼确保数据的唯一性
    ◼可以加速表和表之间的连接,实现表与表之间的参照
    完整性
    ◼使用分组和排序子句进行数据检索时,可以显著减少
    分组和排序的时间
    ◼全文检索字段进行搜索优化
    ◆分类
    ◼主键索引(PRIMARY KEY)
    ◼唯一索引(UNIQUE)
    ◼常规索引(INDEX)
    ◼全文索引(FULLTEXT)

主键索引

◆主键:
◼某一个属性组能唯一标识一条记录
如:学生表(学号,姓名,班级,性别等) ,学号就是唯一标识的,
可作为主键
◆特点:
◼最常见的索引类型
◼确保数据记录的唯一性
◼确定特定数据记录在数据库中的位置

示例MySQL的多表查询,事务处理以及索引_第4张图片

唯一索引(UNIQUE)

◼作用:
⚫避免同一个表中某数据列中的值重复
◼与主键索引的区别
⚫主键索引只能有一个
⚫唯一索引可有多个

示例

MySQL的多表查询,事务处理以及索引_第5张图片

常规索引

◆常规索引(INDEX)

◼作用:

⚫快速定位特定数据

◼注意:

⚫index和key关键字都可设置常规索引
⚫应加在查找条件的字段
⚫不宜添加太多常规索引,影响数据的插入、删除和修改操作

示例

MySQL的多表查询,事务处理以及索引_第6张图片

全文索引

◆全文索引(FULLTEXT)

◼作用:
⚫快速定位特定数据
◼注意:
⚫只能用于MyISAM类型的数据表
⚫只能用于 CHAR 、 VARCHAR、TEXT数据列类型
⚫适合大型数据集

MySQL的多表查询,事务处理以及索引_第7张图片

管理索引

◆创建索引
◼创建表时添加
◼建表后追加:
⚫语法: ALERT TABLE 表名 ADD 索引类型(数据列名)
◆删除索引
◼DROP INDEX 索引名 ON 表名
◼ALTER TABLE 表名 DROP INDEX 索引名
◼ALTER TABLE 表名 DROP PRIMARY KEY
◆查看索引
◼SHOW INDEX(或KEYS) FROM 表名

索引准则

◆索引不是越多越好

◆不要对经常变动的数据加索引

◆小数据量的表建议不要加索引

◆索引一般应加在查找条件的字段

你可能感兴趣的:(MySQL的多表查询,事务处理以及索引)