子查询:在一条sql语句中嵌入在其他sql语句中的select语句,也叫嵌套查询

单行子查询:返回一行记录的子查询。

                查询与“成绩优秀” 同学的同班同学:

select * from student where classes_id=(select classes_id from student where 
name='成绩优秀');

       多行子查询:返回多行记录的子查询(关键字IN和NOT IN)

select * from score where course_id in (select id from course where name='语文' or name='数学');

select * from score where course_id not in (select id from course where name!='语文' and name!='数学');

先将语文和数学的课程ID获取出来,然后使用成绩表的每一条数据在集合中进行对比,是否在集合中,IN适用于子条件结果较少的场景。

        多列包含查询:

select * from score sco where exists (select sco.id from course cou where (name='语文' or name='英文') and cou.id = sco.course_id);

select * from score sco where not exists (select sco.id from course cou where (name!='语文' and name!='英文') and cou.id = sco.course_id);

先从成绩表中取出成绩,然后将成绩的课程ID放到子条件中进行查询判断查询结果是否为真,若为真则取出,若为假则丢弃。适用于后表数据记录较多的场景。

合并查询:将多条sql语句的执行结果合并到一起--union,union all,前后查询的结果集中,字段需要一致。

union该操作符用于取得两个结果集的并集。当使用该操作符时,自动去掉结果集中的重复行。

select * from course where id<3 union select * from course where name='英文';
-- 或者使用or来实现
select * from course where id<3 or name='英文';

union all:该操作符用于取得两个结果的并集。当使用该操作符时,不会去掉结果集中的重复行。

select * from course where id<3 union all select * from course where name='英文';

索引与事务:

语句后边加上\G可以改变表的查看方式。

索引:数据库中对数据进行存储的一种数据结构。

类型:存储结构:B/B+树,hash,...

         作用:索引就像是一本书中内容的目录,大大提高对于数据检索的效率。

使用性质:主键索引、唯一键索引、外键索引、普通索引

聚簇索引:索引的叶子节点就是数据,索引与数据都是顺序存储。

                          一张表只能有一个。针对范围性或有序的数据查询效率较高。

                          在插入数据时需要调整存储结构效率较低,常用于自增属性的主键(尽可能少的调整存储结构)

 非聚簇索引:索引与数据都是单独存储,数据的存储是无序的。可以有多个。

创建:创建数据库表的时候,会伴随主键(PRIMARY KEY),唯一键(UNIQUE),外键(FOREIGN KEY)而创建索引。

创建普通索引: create index 索引名 on 表名(字段名);//直接针对某张表

通过修改表结构添加主键或唯一键或外键方式添加索引:

 alter table student add unique key uk(name);

查看索引:show index from 表名;

             删除索引:drop index 索引名 on 表名;

事务:将多条SQL语句当作一个整体进行执行的功能。

          操作:

                开始事务:start  transaction

                回滚事务:rollback

                提交事务:commit

start transaction;
--小明账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 小黑账户增加2000

update accout set money=money+2000 where name = '四十大盗';
commit;

事务存在的必要性:当数据库不支持事务的时候有可能出现的情况。

      脏写:事务A进行了一条数据的修改操作;在事务还没有提交的时候事务B又对数据进行修改

脏读:事务A开始事务,修改了数据;事务B查询到了修改后数据;事务A提交或回滚事务。

举个例子:财务给小明发了5000工资,修改了数据库;小明一查账户自己收到5000;财务发现工资发错了,回滚了事务,读取到了事务还没提交之前所作的修改。

不可重复读:事务A先读取数据;事务B修改数据;事务B提交事务;事务A再次读取数据,事务A在不同的阶段所读取到的数据不同。

幻读:事务A读取某个范围内的记录;事务B天机了一条记录;事务B提交事务;事务A再次读取范围内的记录。(主要针对数据的添加/删除)

特性:

       原子性:要么操作全部完成,要么就不做

       一致性:若数据库只包含了完整的事务则处于一致性;若事务进行中出现异常中断,则处于非一致性。(一致性基于原子性实现)

       持久性:事务一旦提交,就会进行持久化存储的磁盘中

       隔离性:保证并发中多个事务不会互相产生影响。

事务的隔离级别:

查看当前数据库的隔离级别:select @@tx_isolation;

网页IM系统,两个用户若是同时注册,是怎么保证不会重复注册?

当前数据库的隔离级别是可重复度--不会出现脏读,幻读,不可重复读情况;查询数据不再存在则添加,在当前数据库的隔离级别下不会出现重复注册。

带你一文看懂MySqL中的事务与索引相关推荐

  1. mysql xa 和普通事务_一文看懂MySQL中基于XA实现的分布式事务

    概述 前面已经介绍了2PC和3PC方面的内容,那么MySQL数据库在分布式事务这块又是怎么规划呢? XA事务简介 XA 事务的基础是两阶段提交协议.需要有一个事务协调者来保证所有的事务参与者都完成了准 ...

  2. mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率

    原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...

  3. 带你一文读懂Javascript中ES6的Symbol

    带你一文读懂Javascript中ES6的Symbol 前言 基础类型 Symbol Symbol.for 与 Symbol.keyFor Symbol.iterator Symbol.search ...

  4. 一文看懂Mysql锁

    一文看懂Mysql锁 Mysql锁 Mysql锁的分类 从性能上 从操作类型上 从锁的粒度上 死锁 死锁的四个条件 死锁的验证 死锁的避免 总结 Mysql锁 既然说到了Mysql锁,那么什么是Mys ...

  5. ​【Python基础】一文看懂 Pandas 中的透视表

    作者:来源于读者投稿 出品:Python数据之道 一文看懂 Pandas 中的透视表 透视表在一种功能很强大的图表,用户可以从中读取到很多的信息.利用excel可以生成简单的透视表.本文中讲解的是如何 ...

  6. 带你一文看懂数字乡村怎么建

    引言 新一代信息化的大背景下,数字乡村.智慧城市.数字中国的概念,近几年被频繁提及.今年在疫情防控的环境下,农产品电商.在线助农.农业直播等互联网农业新业态不断涌现.近日,中央网信办等七部门联合印发& ...

  7. 一文搞懂 mysql 中的共享锁、排他锁、悲观锁、乐观锁及使用场景

    目录 一.常见锁类型 二.Mysql引擎介绍 三.常用引擎间的区别 四.共享锁与排他锁 五.排他锁的实际应用 六.共享锁的实际应用 七.死锁的发生 八.另一种发生死锁的情景 九.死锁的解决方式 十.意 ...

  8. 一文搞懂 MySQL 中的索引

    1. 什么是索引 MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构.可以得到索引的本质:索引是数据结构. 举一个例子,平时看任何一本书,首先看到的都是目录, ...

  9. 带你一文看懂 Blockchain + NoSQL数据库

    来源 | Tyler Mitchell 译者 | 火火酱,责编 | Carol 图源 | CSDN下载自视觉中国 NoSQL数据库和现代区块链分类账都受益于一套共同的原则.由于其二者平台可以相互补充, ...

最新文章

  1. 谷歌研究院最新发现:训练结果不准确,超大数据规模要背锅!
  2. 7.某计算机的控制器采用微程序控制方式,微指令中的操作控制字段的16位采用混合表示法,其中用11位采用直接表示法,另外5位分为3位和2位的编码表示法,则此格式的微指令最多可表示多少个微指令?
  3. springer link:find the journals you need
  4. [route]Add up route for deb rpm and windows / 为RPM系DEB系和Windows添加路由
  5. 【德】博多·费舍尔 - 小狗钱钱2(2013年7月27日)
  6. 用session监听实现在线统计
  7. python代码扫描工具_Python脚本实现Web漏洞扫描工具
  8. 强大的视频格式转换工具——iSkysoft iMedia Converter Deluxe Mac
  9. html设置桌面背景win7,win7电脑桌面背景怎么设置_win7电脑桌面壁纸怎么设置-win7之家...
  10. 朗文当代高级英语辞典android,朗文当代高级英语辞典
  11. ubuntu18.04在状态栏显示网速
  12. mac 破解安装 navicat
  13. 【RHCSA】Linux中执行命令
  14. 软件测试基础篇(1)
  15. 从零开始的命令行CLI
  16. 控制面板有u盘显示,可是计算机不显示u盘符
  17. 多线程并发数量设置设多少算合理
  18. 2 Java并发原理精讲课程学习笔记
  19. 浅谈ArcGIS中的容差和分辨率
  20. SBAS与GBAS增强技术部分总结

热门文章

  1. 解决使用sudo没问题,但是使用su会报错 su: Authentication failure 的问题
  2. lnmp mysql主从_LNMP linux下mysql主从复制 _好机友
  3. 前端 datatable 居中_Midway Serverless 如何让阿里前端提效 50%?
  4. java table 设置长度_Java字节码lookupswitch和tableswitch总指令长度
  5. 非结构化文件转移服务器,非结构化数据存储管理方法,服务器和系统 Unstructured data storage management method, and a system server...
  6. 利用MFC进行开发的通用方法介绍
  7. [算法笔记]分块算法从入门到TLE
  8. Vue.js-资料-组件化思想 —上
  9. 3-3 修改haproxy配置文件
  10. 元素与集合的问题思考