sql知识梳理(超全,超详细,自用)

article/2025/8/13 19:16:03

目录

通识

查询的基本语法

数据库(database)操作

表(table)的操作

表中列的操作

索引操作

表中行的操作

insert into语句

update语句

删除语句

select语句

 表与表之间的关系

连接查询

子查询

视图

数据备份与还原

事务安全

触发器


通识

1.SQL 对大小写不敏感:SELECT 与 select 是相同的

2.分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句,故在运行两条及以上SQL语句时需要在每条SQL语句末端添加分号。

3.SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。

4.约束类型:主键,非空,唯一,默认值,外键等

5.数据类型:整数,小数,字符串,日期,枚举等

查询的基本语法

语句备注
select

投影数据表中的列,存储到一个结果集中

(distinct关键词用于返回唯一不同的值)

from
where

设置元组筛选条件,返回那些满足指定条件的记录

(运算符:=,<>,>,<,>=,<=,and,or,between,like,in,is,())

group by

having 
order by

对结果集按照一列或者多列进行排序

(asc升序(默认),desc降序)

limit

数据库(database)操作

#创建数据库:
create database 数据库名;
create database 数据库名 character set 字符集;#创建之后修改数据库编码
alter database 数据库名 character set 字符集;#查看所有的数据库:
show databases;#查看某个数据库的定义的信息:
show create database 数据库名;#删除数据库:
drop database 数据库名称;#切换数据库:
use 数据库名;#查看正使用的数据库
select database();

表(table)的操作

#创建表:
create table 表名(字段名 类型(长度) 约束,字段名 类型(长度) 约束
);#查看所有表:
show tables;#查看表的结构:
1) desc 表名;
2) show columns from 表名;#删除表:
drop table 表名;#修改表名
rename table 表名 to 新表名;#修改表达字符集:
alter table 表名 character set 字符集;

表中列的操作

#添加列
1)添加一个字段
alter table 表名 add 列名 类型约束 (after 某个字段);
2)添加多个字段
alter table 表名 add (列名1 类型约束1,列名2 类型约束2)#修改列的类型约束:
alter table 表名 modify 列名 类型约束#修改列名
alter table 表名 change 列名 类型约束#删除列
alter table 表名 drop 列名;

索引操作

#已存在的表#普通索引:
1)CREATE INDEX 索引名称 ON 表名(字段);  
2)ALTER TABLE 表名 ADD INDEX 索引名称(字段); #唯一索引:
CREATE UNIQUE INDEX 索引名称 ON 表名(字段)#联合索引:
CREATE INDEX 索引名称 ON 表名(字段1,字段2...)#删除索引
DROP INDEX 索引名称 ON 表名;

表中行的操作

insert into语句

#第一种:不指定列名,插入的值要和列名一一对应
insert into table_name 
values (valuel1,valuel2,...);#第二种:指定列名,未被指定的列名值为空
insert into table_name(column1,column2,...) 
valuse (valuel1,valuel2,...);#IGNORE关键字会在发生主键冲突、唯一性冲突,直接忽略这条数据(不会报错)往下执行。
INSERT [IGNORE] INTO 表名 ......;#蠕虫复制:先从已用表中查出数据, 然后将查出的数据新增一遍
#可以迅速的让表中的数据膨胀到一定的数量级: 测试表的压力以及效率
Insert into 表名[(字段列表)] select 字段列表/* from 数据表名;

update语句

#更新数据
UPDATE [IGNORE] 表名 SET 字段1=值1, 字段2=值2, ......
[WHERE 条件1 ......]
[ORDER BY  排列的列 desc/asc]
[LIMIT ......];
#如果这里有limit关键字,那么后面只能跟一个参数,即表示取前多少条数据,#UPDATE语句中的外/内连接
UPDATE 表1 [空/left/right/full] JOIN 表2 SET 字段1=值1, ... WHERE 条件;

删除语句

#删除表数据,保留表的结构,数据库中该表还存在
DELETE [IGNORE] FROM 表名
[WHERE 条件1, 条件2, ...]
[ORDER BY ...]
[LIMIT ...];#完全删除表,包括表结构,数据库就查不到这个表了
drop table 表名#只能删除全表数据,会保留表结构,数据库中该表还存在
truncate table 表名

select语句

#查询数据
Select [DISTINCT] [字段别名/*] 
from 表名(多表连接) 
[where条件子句] 
[group by子句] 
[having子句] 
[order by子句] 
[limit 子句];

 表与表之间的关系

一对一

一对多

多对多

连接查询

内连接(左右表相同部分的交集)

1)join
select * from A  join B on A.id = B.id 2) inner join
select * from A inner join B on A.id = B.id 3)逗号的连表方式就是内连接
select * from A , B where A.id = B.id 

外连接

如果右表有符合条件的记录就与左表连接。如果右表没有符合条件的记录,就用NULL与左表连接。

1) left/right join
select * from A left join B on  A.id = B.id 2) left/right outer join
select * from A left outer join B on  A.id = B.id

自然连接 natural join

基于具有相同名称的列自动执行连接操作

笛卡尔连接 cross join

返回两个表中所有可能的行组合

子查询

类别

相关子查询:select 和 where语句后的子查询(效率低,不推荐使用但可以使用)

不相关子查询:from 语句后的子查询(√)

关键字

视图

定义 

视图是一个虚拟表。它基于一个或多个底层基表(物理存在的表)或其他视图的 SQL 查询结果。视图本身不存储数据,它只是一个存储起来的 SELECT 语句。

特性

  • 虚拟性: 数据是动态生成的,每次查询视图时,数据库引擎都会执行其定义的 SQL 语句去获取最新的基表数据。
  • 可更新性 (并非所有视图都可更新): 在某些条件下,可以通过视图对基表进行 INSERTUPDATEDELETE 操作。
  • 可嵌套: 视图可以基于其他视图定义(但要避免循环依赖)。视图 (CREATE VIEW)

视表的操作

#创建视图
CREATE VIEW 视图名 AS 查询语句;#查询视图:和查询普通表一样#查看视图定义
SHOW CREATE VIEW 视图名;#修改视图
ALTER VIEW 视图名 AS 查询语句;#有则修改,无则创建
CREATE OR REPLACE VIEW 视图名 AS 查询语句;#删除视图:IF EXISTS 防止因视图不存在而报错。
DROP VIEW [IF EXISTS] view_name

数据备份与还原

  • 数据表备份(表结构+表数据):数据表备份有前提条件: 根据不同的存储引擎有不同的区别
  • 单表数据备份
  • SQL备份:系统会对表结构以及数据进行处理,变成对应的SQL语句, 然后进行备份: 还原的时候只要执行SQL指令即可.(主要就是针对表结构)
  • 增量备份(日志文件):指定时间段开始进行备份., 备份数据不会重复, 而且所有的操作都会备份(大项目都用增量备份)

事务安全

定义

  • 事务: 一系列要发生的连续的操作(即一组SQL语句)
  • 事务安全: 一种保护连续操作同时满足(实现)的一种机制
  • 事务安全的意义: 保证数据操作的完整性

事务属性

  • 原子性,一个事物中的所有操作要么全部完成,要么全部失败。事物执行后,不允许停留在中间某个状态。
  • 一致性,不管在任何给定的时间,并发事务有多少,事务必须保证运行结果的一致性。事务可以并发执行,但是最终MySQL却串行执行。
  • 隔离性,每个事务只能看到事务内的相关数据,别的事务的临时数据在当前事务是看不到的。隔离性要求事务不受其他并发事务的影响,在给定时间内,该事务是数据库运行的唯一事务。
  • 持久性,事务一旦提交,结果便是永久性的。即便发生宕机,仍然可依靠事务日志完成数据持久化。

隔离级别

事务问题(隔离属性会引发的问题)

  • 脏读:事务 A 读取了事务 B 当前更新的数据,但是事务 B 出现了回滚或未提交修改,事务 A 读到的数据就被称为 “脏数据”。通常情况下,使用 “脏数据” 会造成系统数据不一致,出现错误
  • 不可重复读:事务 A 在执行过程中多次读取同一数据,但是事务 B 在事务 A 的读取过程中对数据做了多次修改并提交,则会导致事务 A 多次读取的数据不一致,进而无法做出准确性判断
  • 幻读:事务 A 在执行过程中读取了一些数据,但是事务 B 随即插入了一些数据,那么,事务 A 重新读取时,发现多了一些原本不存在的数据,就像是幻觉一样,称之为幻读

事务操作-手动管理

开启事务:start transaction;
事务内容:SQL语句;
事务关闭:commit;
【事务回滚:rollback;】

事务操作-自动管理

自动事务: 系统通过autocommit变量控制
查看是否开启:Show variables like ‘autocommit’;
开启自动提交: set autocommit = on/1;

触发器

定义

触发器 trigger:事先为某张表绑定好一段代码 ,当表中的某些内容发生改变的时候(增删改)系统会自动触发代码执行.

触发器: 事件类型, 触发时间, 触发对象

事件类型: 增删改, 三种类型insert,delete和update

创建触发器

#在mysql高级结构中: 没有大括号,  都是用对应的字符符号代替-- 临时修改语句结束符Delimiter 自定义符号 -- 后续代码中只有碰到自定义符号才算结束Create trigger 触发器名字 触发时间 事件类型 on 表名 for each rowBegin -- 代表左大括号: 开始-- 里面就是触发器的内容: 每行内容都必须使用语句结束符: 分号End -- 代表右带括号: 结束自定义符号-- 将临时修改修正过来

查看触发器

#查看所有触发器或者模糊匹配
Show triggers [like ‘pattern’];
\g 的作用是分号和在sql语句中写’;’是等效的
\G 的作用是将查到的结构旋转90度变成纵向#可以查看触发器创建语句
Show create trigger 触发器名字;#系统视图(Information_schema)的触发器的定义信息
Information_schema.triggers

删除&修改

触发器不能修改,只能先删除,后新增. 
#删除
Drop trigger 触发器名字;

     


    http://www.hkcw.cn/article/qdpcobgaNj.shtml

    相关文章

    数据分析图表类型及其应用场景

    说明&#xff1a;顶部HTML文件下载后可以直接查看&#xff0c;带有示图。 摘要 数据可视化作为现代数据分析的核心环节&#xff0c;旨在将复杂、抽象的数据转化为直观、易懂的图形形式。这种转化显著提升了业务决策能力&#xff0c;优化了销售与营销活动&#xff0c;开辟了新…

    1、树莓派更换软件下载源

    树莓派官方系统raspbian自带的是国外的软件源&#xff0c;在国内使用经常会遇到无法下载软件的问题。 以下是把raspbian系统&#xff08;buster版本&#xff09;的下载源改为阿里云软件源的方法。 1、修改sources.list文件 sudo nano /etc/apt/sources.list 将初始化中的代…

    TDengine 集群容错与灾备

    简介 为了防止数据丢失、误删操作&#xff0c;TDengine 提供全面的数据备份、恢复、容错、异地数据实时同步等功能&#xff0c;以保证数据存储的安全。本节简要说明 TDengine 中的容错与灾备。 容错 TDengine 支持 WAL 机制&#xff0c;实现数据的容错能力&#xff0c;保证数…

    第十五章 访问控制

    系列文章目录 第一章 总体概述 第二章 在实体机上安装ubuntu 第三章 Windows远程连接ubuntu 第四章 使用Docker安装和运行EMQX 第五章 Docker卸载EMQX 第六章 EMQX客户端MQTTX Desktop的安装与使用 第七章 EMQX客户端MQTTX CLI的安装与使用 第八章 Wireshark工具的安装与使用 …

    LeetCode算法题 (搜索二维矩阵)Day18!!!C/C++

    https://leetcode.cn/problems/search-a-2d-matrix/description/ 一、题目分析 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 ta…

    基于谷歌ADK的智能客服系统简介

    Google的智能体开发工具包&#xff08;Agent Development Kit&#xff0c;简称ADK&#xff09;是一个开源的、以代码为中心的Python工具包&#xff0c;旨在帮助开发者更轻松、更灵活地构建、评估和部署复杂的人工智能智能体&#xff08;AI Agent&#xff09;。ADK 是一个灵活的…

    MySql(十三)

    目录 mysql外键约束 准备工作 创建表 插入数据 创建表时添加外键 1..格式 2..创建表student表时&#xff0c;为其添加外键 3.插入数据测试 正常数据 异常数据 3.使用alter添加外键 删除外键 添加外键 4.Mysql外键不生效的原因 修改引擎 phpystudy的mysql位置 mysql外键约束 注&…

    WEBSTORM前端 —— 第3章:移动 Web —— 第2节:空间转换、转化

    目录 一、空间转换 1.空间转换 2.空间转换 – 平移 3.视距 perspective 4.空间 – 旋转 ③空间旋转——Z轴代码与效果视频 ④空间旋转——X轴代码与效果视频 ⑤空间旋转——Y轴代码与效果视频 5.立体呈现 – transform-style 案例 – 3D 导航 6.空间转换 – 缩放 …

    【AI论文】R2R:通过小型与大型模型之间的令牌路由高效导航发散推理路径

    摘要&#xff1a;大型语言模型&#xff08;LLMs&#xff09;以巨大的推理开销为代价&#xff0c;实现了令人印象深刻的推理能力&#xff0c;这带来了巨大的部署挑战。 尽管蒸馏的小语言模型&#xff08;SLM&#xff09;显著提高了效率&#xff0c;但由于它们无法遵循LLM的推理路…

    学习日记-day20-6.1

    完成目标&#xff1a; 知识点&#xff1a; 1.集合_Collections集合工具类 方法:static <T> boolean addAll(Collection<? super T> c, T... elements)->批量添加元素 static void shuffle(List<?> list) ->将集合中的元素顺序打乱static <T>…

    区块链可投会议CCF B--EDBT 2026 截止10.8 附录用率

    Conference&#xff1a;EDBT: 29th International Conference on Extending Database Technology CCF level&#xff1a;CCF B Categories&#xff1a;数据库&#xff0f;数据挖掘&#xff0f;内容检索 Year&#xff1a;2026 Conference time&#xff1a;24th March - 27th…

    蓝光过滤APP:护眼小助手,守护您的视力健康

    在数字时代&#xff0c;手机和平板电脑已成为我们生活中不可或缺的工具。无论是工作、学习还是娱乐&#xff0c;长时间使用这些设备已成为常态。然而&#xff0c;长时间盯着屏幕不仅会导致眼睛疲劳&#xff0c;还可能对视力造成不可逆的损害。蓝光过滤APP正是为了解决这一问题而…

    AAA基础配置

    文章目录 组网需求组网拓扑实验步骤测试结果配置文件 组网需求 为组网安全&#xff0c;经常会使用AAA技术&#xff0c;本次以CE12800交换机Window为例&#xff0c;实现AAA本地认证登录 组网拓扑 实验步骤 配置接口IP&#xff0c;连通终端进入AAA视图配置用户名密码配置账户权…

    基于Dify实现各类报告文章的智能化辅助阅读

    大家在日常工作中经常需要阅读或审核各类报告、纪要、文章等材料,但经常由于时间有限,无法完整的阅读全文,因此就需要类似于秘书或者助手角色来帮助整理出报告的主要内容,观点和支撑信息等,这些需求恰恰是目前AI大模型的强项,因此本次就基于dify的工作流实现单个报告材料…

    实验:基于SpringBoot+MyBatis-Plus实现文章列表增删改查

    目录 实验内容前言一、添加新的依赖二、配置连接MySQL数据库三、创建实体类以及Mapper、Service和Controller三层架构POJOMapperServiceIServiceServiceImpl Controller 四、添加配置类、响应类和全局异常处理类五、根据接口文档编写控制器方法并测试接口1.新增文章接口1.1 基本…

    CS144 - Lecture 2

    CS144 - Lecture 1 TCP 这里就简单讲了一下它的基本性质&#xff0c;没啥好说的 UDP 提供不可靠的传输服务&#xff0c;我们的 DNS 服务和 DHCP 都是用的 UDP 协议。 对于 DNS 我们只是单纯地向 DNS 服务器发送域名&#xff0c;然后返回一个 IP&#xff0c;如果还需要建立…

    Go中MAP底层原理分析

    MAP底层原理分析 参考 https://golang.design/go-questions/map/principalmap | Golang 中文学习文档 先来看一下map结构体&#xff0c;&#xff08;runtime.hmap结构体就是代表着 go 中的map&#xff0c;与切片一样map的内部实现也是结构体&#xff09; type hmap struct {/…

    第十六章 EMQX黑名单与连接抖动检测

    系列文章目录 第一章 总体概述 第二章 在实体机上安装ubuntu 第三章 Windows远程连接ubuntu 第四章 使用Docker安装和运行EMQX 第五章 Docker卸载EMQX 第六章 EMQX客户端MQTTX Desktop的安装与使用 第七章 EMQX客户端MQTTX CLI的安装与使用 第八章 Wireshark工具的安装与使用 …

    构建系统maven

    1 前言 说真的&#xff0c;我是真的不想看构建了&#xff0c;因为真的太多了。又多又乱。Maven、Gradle、Make、CMake、Meson、Ninja&#xff0c;Android BP。。。感觉学不完&#xff0c;根本学不完。。。 但是没办法最近又要用一下Maven&#xff0c;所以咬着牙再简单整理一下…

    java CountDownLatch‌

    CountDownLatch是用于线程同步的工具类&#xff0c;主要作用是让当前线程等待其他线程完成操作后再继续执行。 示例代码&#xff1a; import java.util.concurrent.CountDownLatch;private static void testCountDownLatch() {int taskNum 5;CountDownLatch latch new Count…