Ming Ming
首页
  • VUE2
  • VUE3
  • 设计模式
  • JUC
  • Nginx
  • RabbitMQ
  • Redis
  • linux
  • SQL
  • MyBatis
  • 软件使用
  • 工具类
  • 在线工具

    • githubHosts (opens new window)
    • 正则表达式 (opens new window)
    • 文件转换器 (opens new window)
    • 代码在线运行 (opens new window)
GitHub (opens new window)
首页
  • VUE2
  • VUE3
  • 设计模式
  • JUC
  • Nginx
  • RabbitMQ
  • Redis
  • linux
  • SQL
  • MyBatis
  • 软件使用
  • 工具类
  • 在线工具

    • githubHosts (opens new window)
    • 正则表达式 (opens new window)
    • 文件转换器 (opens new window)
    • 代码在线运行 (opens new window)
GitHub (opens new window)
  • 数据库

    • sql
      • 一、增删改查
        • 1、数据库的四种操作
        • 2、查询SQL的结构是
        • 3、写SQL的顺序
        • 4、FROM的作用
        • 5、WHERE的作用
        • 6、GROUP BY的作用
        • 7、创建数据库(schema)
        • 8、创建表
        • 9、插入数据
      • 二、JOIN
        • 1、JOIN 表 ON 过滤条件
        • 2、LEFT JOIN 表 ON 过滤条件
      • 三、子查询
        • 1、WHERE里面的子查询
        • 2、SELECT里面的子查询
        • 3、FROM里面的子查询
      • 四、半连接
      • 五、索引
      • 六、数据库三范式和反模式
      • 七、事务
    • mybatis
  • 数据库
  • 数据库
J-Ming
2021-11-05
目录

sql

# 一、增删改查

# 1、数据库的四种操作

  1. insert 增
  2. delete 删
  3. update 改
  4. select 查 不改变数据库

# 2、查询SQL的结构是

​ SELECT... FROM... WHERE... GROUP BY... HAVING.... ORDER BY... LIMIT...

# 3、写SQL的顺序

**FROM-->WHERE-->GROUP BY-->SELECT-->HAVIGN-->ORDER BY-->LIMIT**

# 4、FROM的作用

​ FROM stu 将stu表的所有数据都获取过来

​ JOIN 以后说

# 5、WHERE的作用

​ 对FROM 中获取的所有数据进行过滤 AND、OR、!= 符合的留下不符合的丢弃

# 6、GROUP BY的作用

​ GROUP BY classId 按照classId进行分组

​ 分组后如果遇到SELECT那么输出的则是分组后每组的第一行数据

​ GROUP BY还可以和聚集函数在一起

​ 聚集函数:

​ COUNT(),SUM(),MAX(),MIN(),AVG(),GROUP_CONCAT()

​ distinct代表不重复可以放在聚集函数里去重,否则函数不会去重

# 7、创建数据库(schema)

​

CREATE DATABASE Student;

# 8、创建表

​

CREATE TABLE stu(id int PRIMARY KEY,name char(10),class_id int) DEFAULT charset=utf8mb4

# 9、插入数据

​

INSERT into stu(id,name,class_id) VALUES(1,'张三',20),(2,'李四',20),(3,'王五',20),
(4,'小明',6),(5,'小红',6),(6,'小华',6),(7,'千钧',2),(8,'一发',2),(9,'淡季',2),(10,'小明',20)
SELECT * FROM stu WHERE class_id=20
SELECT * FROM stu GROUP BY class_id DESC
SELECT count(DISTINCT name),class_id FROM stu GROUP BY class_id DESC
SELECT sum(id),class_id FROM stu GROUP BY class_id DESC

# 二、JOIN

# 1、JOIN 表 ON 过滤条件

左表的每行数据都与右表每行数据按过滤条件匹配生成新表

# 2、LEFT JOIN 表 ON 过滤条件

区别: ①LEFT JOIN 必须有ON

​ ②会检查左边表的数据是否都包含在新生成的表中如果包含那么与JOIN没区别

​ 如果不包含那么会与NUL组成新的一行加入到新表中

​

# 三、子查询

# 1、WHERE里面的子查询

SELECT id FROM stu WHERE classId = (SELECT id FROM class WHERE teacher = '小红')

# 2、SELECT里面的子查询

SELECT id,(SELECT id FROM class WHERE teacher = '小红') FROM stu 

# 3、FROM里面的子查询

SELECT stu.name FROM stu JOIN (SELECT * FROM class WHERE teacher='小红') AS c 
ON stu.classId = c.id

注:FROM里面的子查询必须起别名

# 四、半连接

SELECT * FROM stu s1 WHERE s1.id = (SELECT MAX(id) FROM stu s2 
WHERE s2.classId = s1.classId)

注:子查询用到了父查询里面的字段

# 五、索引

能被用到的才能作为索引

-- EXPLAIN 可以查看是否使用索引
EXPLAIN SELECT * FROM stu\G

MYSQL中主键是聚簇索引,其他的是非聚簇索引。聚簇索引下存的是数据,非聚簇下存的是主键。

每用一次非聚簇索引就会走一次聚簇索引。(如果没有主键则会默认创建一个看不见的主键)

全覆盖索引:SQL语句中用到的列全部包含于索引中,那么该索引就是这个SQL语句的全覆盖索引

这种情况下不会在走一遍聚簇索引

例:

SELECT classId FROM stu WHERE classId = 1;

# 六、数据库三范式和反模式

第一范式:强调属性的原子性约束,要求属性具有原子性不可再分解

第二范式:强调记录的唯一性约束,要求必须有一个主键,并且没有包含在主键中的列必须完全依赖于主键,而不 能只依赖主键的一部分

第三范式:强调属性的冗余性约束,非主键列必须直接依赖于主键。

范式可以避免数据冗余,监视我数据库的空间,减轻维护数据库完整性的麻烦,然而通过数据库范式化的设计会导致数据库业务涉及的表变多,并可能需要进行连表查询,这样会导致数据库性能下降,且不利于分库分表。

反模式:即空间换取时间,采用冗余数据避免表的关联查询

# 七、事务

设置事务级别

SET SESSION TRANSACTION ISOLATION LEVEL READ UMCOMMITTED;
编辑 (opens new window)
上次更新: 2024/06/12, 02:20:36
mybatis

mybatis→

Theme by Vdoing | Copyright © 2024-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式