mysql事务

2021-09-13  本文已影响0人  赵恩栋

储存方式

内存储存的缺点:易失性。比如数组、集合

数据库的好处:

  1. 持久化数据到本地

  2. 可以实现结构化的查询、方便管理

DB:

数据库(database):储存数据的“仓库”。他保存了一系列有组织的数据。

DBMS:

数据库管理系统(Database Management System)。数据库是通过DBMS创建和操作的容器

sql:

结构化查询语言:专门用来与数据库通信的语言

常见的数据库管理系统 :mysql、oracle、DB2、SqlServer

mysql

安装目录my.ini端口,引擎等

Mysql常见命令

  1. 查看当前所有的数据库

    show databases

  2. 打开指定的库

    use 库名

  3. 查看当前库的所有表

    show tables

  4. 查看其他库的所有表

    show tables form 库名;

  5. 查看表结构

    desc 表名

DQL语言的学习

基础查询

IFNULL:可以判断数据为空的时候

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n53" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">BETWEEN AND -- 介于某两者之间,包括临界
IN -- 判断某字段的值是否属于in列表中的某一项
IS NULL -- 值为空的字段,=或者<>不能判断null</pre>

常见函数

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n55" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">-- 一、字符函数
1、length 获取参数值的字节个数
2、concat 拼接字符串
3、upper/lower 变大/小写
4、substr/substring 截取
5、instr 返回子串在第一个位置的索引
6、trim 去掉前后中的相同的单位
7、lpad 用指定的字符实现左填充填充指定的长度
8、rpad 用指定的字符实现右填充填充指定的长度
9、replace 替换</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n56" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">-- 二、数学函数
1、round 四舍五入,默认取整 允许小组点保留N位
2、ceil 向上取整,返回大于等于该参数的最小整数
3、floor 向下取整,返回小于等于改参数的最大整数
4、truncate 截断
5、mod 取余</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n57" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">-- 三、日期函数
1、now 返回当前系统日期+时间
2、curdate 返回当前系统日期,不包括时间
3、curtime 返回当前的时间,不包含日期
4、str_to_date 将日期格式的字符转换成指定成指定格式的日期
5、date_faormat 将日期转化为字符</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n58" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">-- 四、流程控制函数
1、if函数
2、case函数
case 要判断的字段或者表达式/可以为空
when 常量1 then 要显示的值1或者语句1;
when 常量2 then 要显示的值2或者语句2;
else 要显示的值n或者语句n
end</pre>

分组函数

用作统计使用,又称为聚合函数或统计函数或组函数

分类:

sum 求和、avg 平均值、max 最大值、count 计算个数

分组查询

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n65" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">/*
语法:
select 分组函数,列(要求出现在group by的后面)
form 表
【where 筛选条件】
group by 分组的列表
【order by 子句】
*/</pre>

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n66" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">HAVING 子句用来从分组的结果中筛选行</pre>

连接查询

  • 分类
*   内连接 inner
    
    
    *   等值连接
        
        
    *   非等值连接
        
        
    *   自连接
        
        
*   外连接
    
    
    *   左外连接
        
        
    *   右外连接
        
        
    *   全外连接
        
        
*   交叉连接

笛卡尔乘积现象:表1 有m行,表2 有n行,结果有m*n行的现象

事务的ACID属性

隐式事务:

事务没有明显的开启和结束的标记

比如 insert、 update、 delete

显式事务:

步骤1:开启事务

set autocommit = 0;

start transaction;可选的

步骤2:编写事务中的sql语句

…….

步骤3:结束事务

commit;提交事务

rollback;回滚事务

脏读

对于两个事务,T1读取了T2更新了但是<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">还没有提交</mark>的字段,然后T2进行回滚,T1读取的内容就是临时且无效的。

不可重复读

T1读取了一个字段,然后T2<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">更新</mark>了改字段,之后T1再次读取同一个字段

幻读

T1从一个表中读取了一个字段,然后T2在该表中<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">插入</mark>了一些新的行,之后,T1再次读取用一个表

SAVEPOINT

SAVEPOINT设置保存点,配合ROLLBACK TO 回滚到保存点

储存引擎

image-20210713212828720

索引

MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构。

在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构就是索引。

索引分类

Explain

哪些情况下需要创建索引

  1. 主键自动建立索引

  2. 频繁作为查询条件的字段应该创建索引

  3. 查询中与其他表关联的字段、外键关系建立索引

  4. 频繁更新的字段不适合创建索引

  5. where条件里用不到的字段不创建索引

  6. 单键/组合索引的选择问题(在高并发下倾向创建组合索引)

  7. 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

  8. 查询中统计或者分组字段

哪些情况不需要创建索引

  1. 表数据太少

  2. 经常增删改的表

  3. 数据重复且分布平均的表字段

image-20210714150721397

├——-List 接口:元素按进入先后有序保存,可重复

│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全

│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全

│—————-└ Vector 接口实现类 数组, 同步, 线程安全

│ ———————-└ Stack 是Vector类的实现类 └——-Set 接口: 仅接收一次,不可重复,并做内部排序

├—————-└HashSet 使用hash表(数组)存储元素

│————————└ LinkedHashSet 链表维护元素的插入次序 └ —————-TreeSet 底层实现为二叉树,元素排好序

上一篇下一篇

猜你喜欢

热点阅读