带你一文看懂MySqL中的事务与索引
子查询:在一条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中的事务与索引相关推荐
- mysql xa 和普通事务_一文看懂MySQL中基于XA实现的分布式事务
概述 前面已经介绍了2PC和3PC方面的内容,那么MySQL数据库在分布式事务这块又是怎么规划呢? XA事务简介 XA 事务的基础是两阶段提交协议.需要有一个事务协调者来保证所有的事务参与者都完成了准 ...
- mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率
原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...
- 带你一文读懂Javascript中ES6的Symbol
带你一文读懂Javascript中ES6的Symbol 前言 基础类型 Symbol Symbol.for 与 Symbol.keyFor Symbol.iterator Symbol.search ...
- 一文看懂Mysql锁
一文看懂Mysql锁 Mysql锁 Mysql锁的分类 从性能上 从操作类型上 从锁的粒度上 死锁 死锁的四个条件 死锁的验证 死锁的避免 总结 Mysql锁 既然说到了Mysql锁,那么什么是Mys ...
- 【Python基础】一文看懂 Pandas 中的透视表
作者:来源于读者投稿 出品:Python数据之道 一文看懂 Pandas 中的透视表 透视表在一种功能很强大的图表,用户可以从中读取到很多的信息.利用excel可以生成简单的透视表.本文中讲解的是如何 ...
- 带你一文看懂数字乡村怎么建
引言 新一代信息化的大背景下,数字乡村.智慧城市.数字中国的概念,近几年被频繁提及.今年在疫情防控的环境下,农产品电商.在线助农.农业直播等互联网农业新业态不断涌现.近日,中央网信办等七部门联合印发& ...
- 一文搞懂 mysql 中的共享锁、排他锁、悲观锁、乐观锁及使用场景
目录 一.常见锁类型 二.Mysql引擎介绍 三.常用引擎间的区别 四.共享锁与排他锁 五.排他锁的实际应用 六.共享锁的实际应用 七.死锁的发生 八.另一种发生死锁的情景 九.死锁的解决方式 十.意 ...
- 一文搞懂 MySQL 中的索引
1. 什么是索引 MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构.可以得到索引的本质:索引是数据结构. 举一个例子,平时看任何一本书,首先看到的都是目录, ...
- 带你一文看懂 Blockchain + NoSQL数据库
来源 | Tyler Mitchell 译者 | 火火酱,责编 | Carol 图源 | CSDN下载自视觉中国 NoSQL数据库和现代区块链分类账都受益于一套共同的原则.由于其二者平台可以相互补充, ...
最新文章
- 谷歌研究院最新发现:训练结果不准确,超大数据规模要背锅!
- 7.某计算机的控制器采用微程序控制方式,微指令中的操作控制字段的16位采用混合表示法,其中用11位采用直接表示法,另外5位分为3位和2位的编码表示法,则此格式的微指令最多可表示多少个微指令?
- springer link:find the journals you need
- [route]Add up route for deb rpm and windows / 为RPM系DEB系和Windows添加路由
- 【德】博多·费舍尔 - 小狗钱钱2(2013年7月27日)
- 用session监听实现在线统计
- python代码扫描工具_Python脚本实现Web漏洞扫描工具
- 强大的视频格式转换工具——iSkysoft iMedia Converter Deluxe Mac
- html设置桌面背景win7,win7电脑桌面背景怎么设置_win7电脑桌面壁纸怎么设置-win7之家...
- 朗文当代高级英语辞典android,朗文当代高级英语辞典
- ubuntu18.04在状态栏显示网速
- mac 破解安装 navicat
- 【RHCSA】Linux中执行命令
- 软件测试基础篇(1)
- 从零开始的命令行CLI
- 控制面板有u盘显示,可是计算机不显示u盘符
- 多线程并发数量设置设多少算合理
- 2 Java并发原理精讲课程学习笔记
- 浅谈ArcGIS中的容差和分辨率
- SBAS与GBAS增强技术部分总结
热门文章
- 解决使用sudo没问题,但是使用su会报错 su: Authentication failure 的问题
- lnmp mysql主从_LNMP linux下mysql主从复制 _好机友
- 前端 datatable 居中_Midway Serverless 如何让阿里前端提效 50%?
- java table 设置长度_Java字节码lookupswitch和tableswitch总指令长度
- 非结构化文件转移服务器,非结构化数据存储管理方法,服务器和系统 Unstructured data storage management method, and a system server...
- 利用MFC进行开发的通用方法介绍
- [算法笔记]分块算法从入门到TLE
- Vue.js-资料-组件化思想 —上
- 3-3 修改haproxy配置文件
- 元素与集合的问题思考