zoukankan      html  css  js  c++  java
  • mysql

    哔哩哔哩了视频连接

    1.连接查询-笛卡尔乘积

      笛卡尔乘(ab表相乘)积(得到的结果)现象:如果现在有两张表 A表有N条数据,B表有M条数据;在没有使用任何有效的条件的情况下,使用 语句 select * from a,b 得到的结果是 N*M条数据的一张表。

      查询语法92年定了一个规则,99年定了一个规则;

       内连接 :A,B两张表都为主表 92年语法是先乘积产生笛卡尔积,然后从笛卡尔乘积结果中筛选符合条件的记录;99年语法 inner join 是 从A,B表中 通过连接条件 拼接成一张新的表,取出两张表中能通过连接条件关联到一起的记录,如A表 1-10 a-c,B表的记录1-10 E-                                F,取出来的数据是 1-10;

      99年外连接: left join  是把left join左边的表作为主表,根据连接条件,拿左表的记录去右表 找到符合条件的右表数据,放到查询结果的新表中,匹配不到 左表添加空值拼接。

            select 条件 from A表 left jion B表

               on 连接条件

              where 筛选条件

              group by 分组条件

                (having 分组后的筛选条件)

              order by 排序条件

             使用左连接的时候,如果连接条件都唯一,不会产生笛卡尔乘积,如果非主表不唯一的情况 ,这个不唯一的记录,会产生局部的笛卡尔乘积,主表不唯一不会产生笛卡尔乘积

              studnet 表  name studnetid;  a,1 b 2,c 3,d 3

              teacher表  studentid  teacher; 1,t1,2.t2 3,t3 4,t4

              结论:,如果非主表不唯一的情况 ,这个不唯一的记录,会产生局部的笛卡尔乘积,主表不唯一不会产生笛卡尔乘积

    2.事务的隔离级别

       事务是计算机术语,含义是 一条sql语句或者多条sql语句 在执行的时候,将他们作为一个整体,期望的结果呢  sql语句全部执行(且成功) 或者是 都没执行;多条sql语句中这些sql之间是依赖关系,如果有一条sql语句没有执行或者执行失败,这个整体能都进行回滚,数据库中的数据回到初始未执行这些sql的状态,牵一动全身; 

      事务的特性:

            原子性:事务是个整体不可以分隔,原子的定义就是不可分隔的最小单元(定义之前是,现在原子是可以分隔了 )。

            一致性:事务执行前后,数据库中的数据是完整的。数据库中的数据关系从一种完整性(一致)状态 变成了另外一种完整性(一致)状态

            隔离性:多个事务可以同时执行,他们之间不相互影响。

            持久性:事务一旦执行成功,会永久性改变数据库中的数据。

            

      navicat 中执行事务:

          mysql 默认的情况开启自动提交功能,默认每一条语句就是一个事务,所以无法把多条sql作为一个整体 进行事务执行;

              myql有个把单个sql作为一个事务进行提交的功能。

          show VARIABLES like 'autocommit'  查看自动提交配置
          set autocommit = 0; 关闭自动提交功能

           sql1

           sql2 ,,,

          结束事务

          commit(提交事务)/rollback(回滚事务)

           

      事务并发执行产生的问题: 多事务并发执行 并且访问相同数据库中相同的数据     

                  脏读:A事务读取了B事务更新了但是未提交的字段数据,如果B事务回滚了,那么A读取的这个字段数据就是临时且无效的数据。

                  不可重复读: A事务读取了字段数据两次,这两次正好是B事务更新这个字段数据前后。所以A读取的这个字段数据前后两次不一致。

                  幻读:A事务读取表中的数据,B事务那对表行数进行了删除或者增加,导致A事务再次读取的行数的时候发现行数多了或者少了。

      默认隔离级别

          事务的隔离性 是解决事务并发产生问题的方法;

          隔离级别的意思是 一个事务和其他事务的隔离程度(达到的效果),这个隔离程度越高,数据的一致性越高,然而并发性越弱。

      事务的隔离级别:

          1.读未提交:事务A开启,事务B可以读取事务A未提交的数据,未提交意味着这个字段数据可以回滚,那么会产生,脏读,不可重复读,幻读

          2.读已提交:事务A开启,事务B只能读取事务A已经提交的数据,数据提交,意味着这个字段数据已经永久改变,A事务数据不会回滚,所有不存在脏读;不可重复读会存在,事务B第一次读取数据是事务A未提交之前的字段数据,第二次读取字段数据是事务A提交后的数据;同理 幻读的存在是 A事务对表中的行进行的增加;Oracle 默认的隔离级别就是读已提交

          3.可重复读:一个事务中多次读取字段数据相同为可重复读,实现的效果,事务A开启,事务B开启,事务A读取字段数据两次,第一次B事务中操作这个字段尚未提交或者为操作这个字段, 第二次是B事务已经提交成功了(既然事务B能提交成功说明没有加锁),事务A读取的这个字段两次数据值相同;但是不支持幻读,事务A读取两次之间,如果事务B对表中中行进行了插入操作,那么事务A读取的行是不一样的,产生了幻读;Mysql的默认隔离级别就是可重复读

          4.序列化:脏读,不可重复读,幻读都能解决;类似于线程同步,A事务执行期间,禁止B事务无法执行sql语句;解决了所有并发问题但是性能差。

           查看数据库的隔离级别:select @@transaction_isolation;

      事务传播性

    3.p188 sql性能

    4.p192索引

    5.p241 主从复制

    6.p331sql预热

    7.p345 主从复制 分库分表

  • 相关阅读:
    AOS编排语言系列教程(五):创建安全组SecurityGroup
    AOS编排语言系列教程(四):创建弹性云服务器ECS
    GO语言实现 自动登陆华为云并获取cookies 详解(兼介绍SSO单点登陆)
    人脸匹配搜索指北
    人脸识别使用base64的方式添加人脸
    AOS编排语言系列教程(三):创建子网Subnet
    AOS编排语言系列教程(二):初识AOS编排语言,创建你的第一个AOS模板
    华为云社区·CSDN【寻找黑马程序员】有奖征文活动,邀你挥洒才情
    AOS编排语言系列教程(一):开启AOS之旅,解锁各种自动化姿势
    00063_String类
  • 原文地址:https://www.cnblogs.com/nextgg/p/15659906.html
Copyright © 2011-2022 走看看