mysql学习笔记
秋水 Lv4

Java学习笔记

Mysql Select的七大子句

  • 1 form
  • 2 on
  • 3 where
  • 4 group by
  • 5 having
  • order by 排序
  • limit 分页

Where和Having的区别

where是针对原表的元素进行筛选,后面不能接分组函数(avg,count,max),而Having是针对分组后的统计结果再次筛选,后面可以接分组函数,还可以使用统计结果的别名。

内连接与左右连接的区别

**内连接 (INNER JOIN)**:

  • 内连接返回的结果集包括两个表格中互相匹配的行。
  • 如果在一个表格中有行没有与另一个表格中的行匹配,那么这些行将被排除在结果集之外。
  • 内连接只返回匹配的行,不包括任何不匹配的行。

**左连接 (LEFT JOIN)**:

  • 左连接返回左表格的所有行以及与右表格匹配的行。
  • 如果右表格中没有与左表格中的某些行匹配的行,结果集中将包括左表格的行,右表格的相关列将包含 NULL 值。
  • 左连接保留左表格的所有行,不论是否有匹配的行。

**右连接 (RIGHT JOIN)**:

  • 右连接返回右表格的所有行以及与左表格匹配的行。
  • 如果左表格中没有与右表格的某些行匹配的行,结果集中将包括右表格的行,左表格的相关列将包含 NULL 值。
  • 右连接保留右表格的所有行,不论是否有匹配的行。

Dense_RANK()函数解释

DENSE_RANK() 是 SQL 中的窗口函数之一,用于计算结果集中的每一行在排序结果中的密集排名(即排名相同的行具有相同的排名,并且排名之间不会有空缺)。它通常与 ORDER BY 子句一起使用,以根据一个或多个列对结果集进行排序,并为每一行分配一个密集排名。

1
语法格式:DENSE_RANK() OVER (PARTITION BY partition_column ORDER BY order_column)
  • PARTITION BY 子句是可选的,用于指定窗口函数的分区,将结果集分成不同的窗口,每个窗口都会独立计算排名。如果不需要分区,可以省略这一部分。

  • ORDER BY 子句用于指定按照哪些列进行排序。

    事务的四大特性

    1. 事务的特性

      1. 原子性(Atomicity):事务是一个原子操作单元,要么全部成功执行,要么全部失败回滚。这意味着如果事务中的任何一个操作失败,整个事务将被回滚,数据库状态不会被部分更改,保持一致性。
      2. 一致性(Consistency):事务执行前后,数据库必须保持一致性状态。这意味着事务应满足数据库的约束和完整性规则,确保不会损坏数据的完整性。
      3. 隔离性(Isolation):多个事务可以并发执行,但每个事务应该与其他事务相互隔离,以避免数据竞争和冲突。隔离级别定义了不同事务之间的隔离程度,如读未提交、读已提交、可重复读和串行化等。
      4. 持久性(Durability):一旦事务被提交,其结果应该永久保存在数据库中,即使系统崩溃也不应该丢失。数据库系统通常使用日志来确保持久性。
    2. 如何提交事务,回滚事务

      mysql中是默认事务是自动提交的,如果需要手动提交和回滚,需要手动设置回滚模式,或者开启事务。

    • 提交事务 commit

    • 回滚事务 rollback

      1. 手动提交模式: set autocommit=false;

        要注意,每次操作完之后,要记得手动commit,否则没有正式生效

      2. 默认还是自动提交模式,只是临时开启一个事务

        start transaction;

        这一段sql需要手动处理

        rollback commit

        下面仍然是自动提交模式。

      3. 所有的DDL语句,不支持事务

        creat, drop,truncate,alter

    1. 删除整个表的两种方式:

      1. delete from 表名称
      2. truncate 表名称;截断表

      区别:

      1. delete效率没有truncate高,因为delete是一条一句一条语句删除,而truncate是把整个表drop掉,在建一个新表
      2. delete支持事务,而turncate不支持事务
    2. 事务的隔离级别

      如果多个客户端操作同一个库的同一个表,就是多线程的并发问题。

      1. 脏读 :一个事务读取了另一个事务未提交的数据
      2. 不可重复读: 同一个事务中前后两次读取的同一条记录不一样,因为被其他事务修改并提交了它
      3. 幻读: 一个事务读取了另一个事务新增,删除的记录情况,记录数不一样,像是出现幻觉。

      Modify和change的区别

      MODIFY

      • MODIFY 用于修改表格中某一列的数据类型或约束,而不涉及更改列的名称。
      • 通常,**MODIFY** 用于更改列的数据类型、添加或删除列的约束,或者修改列的默认值。例如,你可以使用 MODIFY 来将列的数据类型从 INT 修改为 **VARCHAR**,或者添加一个 NOT NULL 约束。
      • MODIFY 不涉及更改列的名称。列名
      • 示例
      1
      2
      ALTER TABLE employees
      MODIFY Mobile VARCHAR(25) NOT NULL;

      CHANGE

      • CHANGE 用于更改表格中某一列的名称和数据类型,以及可选地添加或删除列的约束。

      • 通常,**CHANGE** 用于更改列的名称和数据类型。你可以指定新的列名和新的数据类型。如果需要,你还可以添加或删除约束。

      • CHANGE 可以同时更改列名和数据类型,因此在使用时需要指定新的列名。

      • 示例

        1
        2
        ALTER TABLE employees
        CHANGE Birth Birthdate DATE;
  • Post title:mysql学习笔记
  • Post author:秋水
  • Create time:2023-09-08 17:14:26
  • Post link:tai769.github.io2023/09/08/mysql学习笔记/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.