美文网首页
mysql事务

mysql事务

作者: 赵恩栋 | 来源:发表于2021-09-13 11:33 被阅读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属性

    • 原子性(Atomicity)

      • 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
    • 一致性

      • 事务必须使数据库从一个一致性状态变换到另外一个一致性状态
    • 隔离性

      • 事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。
    • 持久性

      • 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响

    隐式事务:

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

    比如 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 底层实现为二叉树,元素排好序

    相关文章

      网友评论

          本文标题:mysql事务

          本文链接:https://www.haomeiwen.com/subject/jsxfgltx.html