当前位置: 首页 > article >正文

SQL语言分类及命令详解(二)

目录

一、DQL (Data Query Language) 数据查询语言

核心命令:SELECT

基本语法:

详细分析:

高级特性:

示例:

二、DDL (Data Definition Language) 数据定义语言

核心命令

CREATE

ALTER

DROP

TRUNCATE

详细分析:

数据类型:需为每列指定适当的数据类型(INT, VARCHAR, DATE等)

约束:

TRUNCATE vs DELETE:

 示例:

三、DML (Data Manipulation Language) 数据操纵语言

核心命令

INSERT

UPDATE

DELETE

详细分析:

INSERT注意事项:

UPDATE/DELETE注意事项:

MERGE:高级操作,根据条件执行INSERT/UPDATE/DELETE

示例:

四、 DCL (Data Control Language) 数据控制语言

核心命令

GRANT

REVOKE

详细分析:

常见权限:

权限级别:

示例:

五、TCL (Transaction Control Language) 事务控制语言

核心命令

事务基本命令

SAVEPOINT

详细分析:

事务特性(ACID):******

隔离级别:

SAVEPOINT:在事务内设置保存点,可以部分回滚

示例:

综合应用示例

总结

DQL:专注于数据检索,SELECT语句功能强大且复杂

DDL:定义数据结构,影响数据库整体架构

DML:操作实际数据,是业务逻辑的核心

DCL:管理数据安全,控制访问权限

TCL:保证数据一致性,管理事务边界


SQL(结构化查询语言)按照功能可以分为以下几大类,我将对每一类进行详细讲解和分析,包括语法、使用场景和注意事项。

一、DQL (Data Query Language) 数据查询语言

核心命令:SELECT

基本语法

SELECT [DISTINCT] column1, column2, ...
FROM table_name
[WHERE condition]
[GROUP BY column_name]
[HAVING group_condition]
[ORDER BY column_name [ASC|DESC]]
[LIMIT offset, count];

详细分析

  1. SELECT 子句:指定要检索的列,可以使用*表示所有列

  2. FROM 子句:指定数据来源的表

  3. WHERE 子句:过滤条件,支持比较运算符(=, >, <等)和逻辑运算符(AND, OR, NOT)

  4. GROUP BY:分组聚合,常与聚合函数(COUNT, SUM, AVG等)一起使用

  5. HAVING:对分组结果进行过滤

  6. ORDER BY:结果排序,默认ASC(升序)

  7. LIMIT:限制返回行数(MySQL语法)

高级特性

  • 子查询:SELECT语句嵌套

  • 连接查询:INNER JOIN, LEFT JOIN等

  • 集合操作:UNION, INTERSECT等

  • 窗口函数:OVER(), RANK()等(高级分析功能)

示例

-- 多表连接查询
SELECT e.name, d.department_name, e.salary
FROM employees e
JOIN departments d ON e.dept_id = d.id
WHERE e.salary > 5000
ORDER BY e.salary DESC
LIMIT 10;-- 使用聚合函数
SELECT department_id, AVG(salary) as avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 6000;

二、DDL (Data Definition Language) 数据定义语言

核心命令

CREATE

-- 创建表
CREATE TABLE table_name (column1 datatype [constraints],column2 datatype [constraints],...[table_constraints]
);-- 创建索引
CREATE [UNIQUE] INDEX index_name 
ON table_name (column1, column2, ...);

ALTER

-- 添加列
ALTER TABLE table_name ADD column_name datatype;-- 修改列
ALTER TABLE table_name MODIFY column_name new_datatype;-- 删除列
ALTER TABLE table_name DROP COLUMN column_name;-- 添加约束
ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_definition;

DROP

DROP TABLE [IF EXISTS] table_name;
DROP INDEX index_name ON table_name;

TRUNCATE

TRUNCATE TABLE table_name;

详细分析

  1. 数据类型:需为每列指定适当的数据类型(INT, VARCHAR, DATE等)

  2. 约束

    • PRIMARY KEY:主键

    • FOREIGN KEY:外键

    • NOT NULL:非空

    • UNIQUE:唯一

    • CHECK:检查条件

  3. TRUNCATE vs DELETE

    • TRUNCATE是DDL操作,删除所有数据并重置自增计数器

    • DELETE是DML操作,可带条件删除,不重置计数器

 示例

CREATE TABLE employees (emp_id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NOT NULL,email VARCHAR(100) UNIQUE,salary DECIMAL(10,2) CHECK (salary > 0),dept_id INT,hire_date DATE DEFAULT CURRENT_DATE,FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);-- 修改表结构
ALTER TABLE employees ADD phone VARCHAR(20);
ALTER TABLE employees MODIFY salary DECIMAL(12,2);

三、DML (Data Manipulation Language) 数据操纵语言

核心命令

INSERT

-- 插入单行
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);-- 插入多行
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...),(value1, value2, ...),...;-- 从查询结果插入
INSERT INTO table_name (column1, column2, ...)
SELECT column1, column2, ...
FROM another_table
WHERE condition;

UPDATE

UPDATE table_name
SET column1 = value1,column2 = value2,...
WHERE condition;

DELETE

DELETE FROM table_name
WHERE condition;

详细分析

  1. INSERT注意事项

    • 列名和值必须一一对应

    • 可以省略列名(需提供所有列的值)

    • 使用DEFAULT关键字插入默认值

  2. UPDATE/DELETE注意事项

    • 必须谨慎使用WHERE条件,避免误操作

    • 可以先使用SELECT测试WHERE条件

  3. MERGE:高级操作,根据条件执行INSERT/UPDATE/DELETE

示例

-- 插入数据
INSERT INTO employees (name, email, salary, dept_id)
VALUES ('张三', 'zhangsan@example.com', 8000.00, 10);-- 更新数据
UPDATE employees
SET salary = salary * 1.1
WHERE dept_id = 10 AND hire_date < '2020-01-01';-- 删除数据
DELETE FROM employees
WHERE emp_id = 1001;

四、 DCL (Data Control Language) 数据控制语言

核心命令

GRANT

GRANT privilege1, privilege2, ...
ON object_name
TO user1, user2, ...
[WITH GRANT OPTION]; -- 允许被授权者再授权

REVOKE

REVOKE privilege1, privilege2, ...
ON object_name
FROM user1, user2, ...;

详细分析

  1. 常见权限

    • SELECT, INSERT, UPDATE, DELETE:表数据操作权限

    • ALTER, INDEX:表结构修改权限

    • CREATE, DROP:数据库对象创建删除权限

    • ALL PRIVILEGES:所有权限

  2. 权限级别

    • 数据库级别:ON database_name.*

    • 表级别:ON database_name.table_name

    • 列级别:部分数据库支持

示例

-- 授予权限
GRANT SELECT, INSERT ON company_db.employees TO user1;-- 授予所有权限并允许传递
GRANT ALL PRIVILEGES ON company_db.* TO admin WITH GRANT OPTION;-- 撤销权限
REVOKE DELETE ON company_db.employees FROM user1;

五、TCL (Transaction Control Language) 事务控制语言

核心命令

事务基本命令

START TRANSACTION; -- 或 BEGIN
-- 执行一系列SQL语句
COMMIT; -- 提交事务
-- 或
ROLLBACK; -- 回滚事务

SAVEPOINT

SAVEPOINT savepoint_name;
ROLLBACK TO savepoint_name;
RELEASE SAVEPOINT savepoint_name;

详细分析

  1. 事务特性(ACID):******

    • 原子性(Atomicity):全部成功或全部失败

    • 一致性(Consistency):保持数据一致状态

    • 隔离性(Isolation):事务间相互隔离

    • 持久性(Durability):提交后永久生效

  2. 隔离级别

    • READ UNCOMMITTED

    • READ COMMITTED

    • REPEATABLE READ

    • SERIALIZABLE

  3. SAVEPOINT:在事务内设置保存点,可以部分回滚

示例

START TRANSACTION;SAVEPOINT before_update;UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE id = 2;-- 检查是否有错误
IF error_occurred THENROLLBACK TO before_update;
ELSECOMMIT;
END IF;

综合应用示例

-- 创建数据库
CREATE DATABASE bank_system;-- 创建表
CREATE TABLE accounts (account_id INT PRIMARY KEY AUTO_INCREMENT,customer_name VARCHAR(100) NOT NULL,balance DECIMAL(15,2) NOT NULL DEFAULT 0,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);CREATE TABLE transactions (transaction_id INT PRIMARY KEY AUTO_INCREMENT,from_account INT,to_account INT,amount DECIMAL(15,2) NOT NULL,transaction_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (from_account) REFERENCES accounts(account_id),FOREIGN KEY (to_account) REFERENCES accounts(account_id)
);-- 插入初始数据
INSERT INTO accounts (customer_name, balance)
VALUES ('张三', 5000.00), ('李四', 3000.00);-- 转账事务
START TRANSACTION;-- 检查账户余额
SELECT balance FROM accounts WHERE account_id = 1 FOR UPDATE;-- 执行转账
UPDATE accounts SET balance = balance - 1000 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE account_id = 2;-- 记录交易
INSERT INTO transactions (from_account, to_account, amount)
VALUES (1, 2, 1000.00);-- 提交事务
COMMIT;-- 查询结果
SELECT a.customer_name, a.balance
FROM accounts a;SELECT * FROM transactions;

总结

  1. DQL:专注于数据检索,SELECT语句功能强大且复杂

  2. DDL:定义数据结构,影响数据库整体架构

  3. DML:操作实际数据,是业务逻辑的核心

  4. DCL:管理数据安全,控制访问权限

  5. TCL:保证数据一致性,管理事务边界

在实际应用中,这些语言通常需要配合使用,以完成复杂的数据库操作。理解各类SQL语言的用途和特性,有助于设计更高效、更安全的数据库应用。

相关文章:

SQL语言分类及命令详解(二)

目录 一、DQL (Data Query Language) 数据查询语言 核心命令&#xff1a;SELECT 基本语法&#xff1a; 详细分析&#xff1a; 高级特性&#xff1a; 示例&#xff1a; 二、DDL (Data Definition Language) 数据定义语言 核心命令 CREATE ALTER DROP TRUNCATE 详细…...

机器学习——LightGBM

LightGBM(light gradient boosting machine&#xff0c;轻量梯度提升机)是对XGBoost进行改进的模型版本&#xff0c;其三者之间的演变关系为&#xff1a;GBDT-》XGBoost-》LightGBM&#xff0c;依次对性能进行优化&#xff0c;尽管XGBoost已经很高效了&#xff0c;但是仍然有缺…...

linux 常见命令使用介绍

Linux 常见命令使用介绍 Linux 是一个功能强大的操作系统&#xff0c;其核心是命令行工具。掌握一些常用的 Linux 命令可以极大地提高工作效率。本文将详细介绍一些常见的 Linux 命令及其用法。 1. 文件与目录操作 ls - 列出文件和目录 # 查看当前目录下的所有文件和子目录&…...

故障识别 | 基于改进螂优化算法(MSADBO)优化变分模态提取(VME)结合稀疏最大谐波噪声比解卷积(SMHD)进行故障诊断识别,matlab代码

基于改进螂优化算法&#xff08;MSADBO&#xff09;优化变分模态提取&#xff08;VME&#xff09;结合稀疏最大谐波噪声比解卷积&#xff08;SMHD&#xff09;进行故障诊断识别 一、引言 1.1 机械故障诊断的背景和意义 在工业生产的宏大画卷中&#xff0c;机械设备的稳定运行…...

[已解决]服务器CPU突然飙高98%----Java程序OOM问题 (2024.9.5)

目录 问题描述问题排查问题解决参考资料 问题描述 业主单位服务器自8月29日晚上21:00起CPU突然飙高至98%&#xff0c;内存爆满&#xff0c;一直到9月5日&#xff1a; 问题排查 ①执行 top 命令查看Java进程PID top②执行top -Hp PID 命令查看具体的线程情况 top -Hp 3058输入上…...

spring如何用三级缓存解决循环依赖问题

spring为何会出现循环依赖问题&#xff1f; 我们举个会产生循环依赖的例子&#xff0c;如下所示&#xff0c;可以看到AService类中依赖了BService类&#xff0c;同理呢&#xff0c;BService类中依赖了AService类&#xff0c;这就是所谓的循环依赖。 Component("aService&…...

【C#】`Task.Factory.StartNew` 和 `Task.Run` 区别

Task.Factory.StartNew 和 Task.Run 都是用来启动新任务的&#xff0c;但它们有一些关键区别&#xff0c;我们来一条一条讲清楚&#xff08;配例子 结论&#xff09;。 &#x1f19a; 1. 语法和使用目的 对比项Task.RunTask.Factory.StartNew用途简化写法&#xff0c;用于启动…...

谈谈空间复杂度考量,特别是递归调用栈空间消耗?

空间复杂度考量是算法设计的核心要素之一&#xff0c;递归调用栈的消耗问题在前端领域尤为突出。 以下结合真实开发场景进行深度解析&#xff1a; 一、递归调用栈的典型问题 1. 深层次DOM遍历的陷阱 // 危险操作&#xff1a;递归遍历未知层级的DOM树 function countDOMNode…...

【2.项目管理】2.4 Gannt图【甘特图】

甘特图&#xff08;Gantt&#xff09;深度解析与实践指南 &#x1f4ca; 一、甘特图基础模板 项目进度表示例 工作编号工作名称持续时间(月)项目进度&#xff08;周&#xff09;1需求分析3▓▓▓░░░░░░░2设计建模3░▓▓▓░░░░░░3编码开发3.5░░░▓▓▓▓░░…...

Ai工作流工具有那些如Dify、coze扣子等以及他们是否开源

Dify &#xff08;https://difycloud.com/&#xff09; 核心定位&#xff1a;专业级 LLM 应用开发平台&#xff0c;支持复杂 AI 工作流构建与企业级管理。典型场景&#xff1a;企业智能客服、数据分析系统、复杂自动化流程构建等。适合需要深度定制、企业级管理和复杂 AI 逻辑…...

【项目】C++同步异步日志系统-包含运行教程

文章目录 项目介绍地址&#xff1a;https://gitee.com/royal-never-give-up/c-log-system 开发环境核心技术为什么需要日志系统同步日志异步日志 知识补充不定参宏函数__FILE____LINE____VA_ARGS__ C使用C使用左值右值sizeof...() 运算符完美转发完整例子sizeof...() 运算符获取…...

Yolo_v8的安装测试

前言 如何安装Python版本的Yolo&#xff0c;有一段时间不用了&#xff0c;Yolo的版本也在不断地发展&#xff0c;所以重新安装了运行了一下&#xff0c;记录了下来&#xff0c;供参考。 一、搭建环境 1.1、创建Pycharm工程 首先创建好一个空白的工程&#xff0c;如下图&…...

Success is the sum of small efforts repeated day in and day out.

&#xff08;翻译&#xff1a;"成功是日复一日微小努力的总和。"&#xff09; 文章内容&#xff1a; Title: The Silent Power of Consistency &#xff08;标题翻译&#xff1a;《持续坚持的无声力量》&#xff09; Consistency is the quiet force that turns asp…...

软件兼容性测试的矩阵爆炸问题有哪些解决方案

解决软件兼容性测试中的矩阵爆炸问题主要有优先级划分、组合测试方法、自动化测试技术等方案。其中&#xff0c;组合测试方法尤其有效。组合测试通过科学的组合算法&#xff0c;能够显著降低测试用例的数量&#xff0c;同时保持较高的测试覆盖率&#xff0c;例如正交实验设计&a…...

嵌入式学习(32)-TTS语音模块SYN6288

一、概述 SYN6288 中文语音合成芯片是北京宇音天下科技有限公司于 2010年初推出的一款性/价比更高,效果更自然的一款中高端语音合成芯片。SYN6288 通过异步串口(UART)通讯方式&#xff0c;接收待合成的文本数据&#xff0c;实现文本到语音(或 TTS 语音)的转换。宇音天下于 2002…...

霸王茶姬小程序(2025年1月版)任务脚本

脚本用于自动执行微信小程序霸王茶姬的日常签到和积分管理任务。 脚本概述 脚本设置了定时任务(cron),每天运行两次,主要用于自动签到以获取积分,积分可以用来换取优惠券。 核心方法 constructor:构造函数,用于初始化网络请求的配置,设置了基础的 HTTP 请求头等。 logi…...

从零到一:打造顶尖生成式AI应用的全流程实战

简介 生成式AI正以前所未有的速度改变我们的世界&#xff0c;从内容创作到智能客服&#xff0c;再到医疗诊断&#xff0c;它正在成为各行各业的核心驱动力。然而&#xff0c;构建一个高效、安全且负责任的生成式AI系统并非易事。本文将带你从零开始&#xff0c;逐步完成一个完整…...

Windows 10更新失败解决方法

在我们使用 Windows 时的时候&#xff0c;很多时候遇到系统更新 重启之后却一直提示“我们无法完成更新&#xff0c;正在撤销更改” 这种情况非常烦人&#xff0c;但其实可以通过修改文件的方法解决&#xff0c;并且正常更新到最新版操作系统 01修改注册表 管理员身份运行注…...

Windows下在IntelliJ IDEA 使用 Git 拉取、提交脚本出现换行符问题

文章目录 背景问题拉取代码时提交代码时 问题原因解决方案1.全局配置 Git 的换行符处理策略2.在 IntelliJ IDEA 中配置换行符3.使用 .gitattributes 文件 背景 在 Windows 系统下使用 IntelliJ IDEA 进行 Git 操作&#xff08;如拉取和提交脚本&#xff09;时&#xff0c;经常…...

ubuntu24.04.2 NVIDIA GeForce RTX 4060笔记本安装驱动

https://www.nvidia.cn/drivers/details/242281/ 上面是下载地址 sudo chmod x NVIDIA-Linux-x86_64-570.133.07.run # 赋予执行权限把下载的驱动复制到家目录下&#xff0c;基本工具准备&#xff0c;如下 sudo apt update sudo apt install build-essential libglvnd-dev …...

一种监控录像视频恢复的高效解决方案,从每一帧中寻找可能性

该软件旨在恢复从监控设备中删除或丢失的视频。该程序经过调整以处理大多数流行供应商的闭路电视系统中使用的专有格式&#xff0c;并通过智能重建引擎进行了增强&#xff0c;能够为监控记录提供任何通用解决方案都无法实现的恢复结果。如果不需要持续使用该软件&#xff0c;则…...

如何快速下载并安装 Postman?

从下载、安装、启动 Postman 这三个方面为大家详细讲解下载安装 Postman 每一步操作&#xff0c;帮助初学者快速上手。 Postman 下载及安装教程(2025最新)...

Unity Shader 学习18:Shader书写基本功整理

1. Drawer [HideInInspector]&#xff1a;面板上隐藏[NoScaleOffset]&#xff1a;隐藏该纹理贴图的TillingOffset[Normal]&#xff1a;检查该纹理是否设为法线贴图[HDR]&#xff1a;将颜色类型设为高动态范围颜色&#xff08;摄像机也要开启HDR才有效果&#xff09;[PowerSlid…...

1.1 计算机网络的概念

首先来看什么是计算机网络&#xff0c;关于计算机网络的定义并没有一个统一的标准&#xff0c;不同的教材有 不同的说法&#xff08;这是王道书对于计算机网络的定义&#xff09;&#xff0c;我们可以结合自己的生活经验去体会这个 定义。 可以用不同类型的设备去连接计算机网络…...

Blender绘图——旋转曲线(以LCP与RCP为例)

最近在做左旋圆偏振光&#xff08;LCP&#xff09;与右旋圆偏振光&#xff08;RCP&#xff09;的研究&#xff0c;因此需要画出他们的图&#xff0c;接下来我就介绍一下用Blender怎么去画LCP与RCP。 首先你需要下载Blender软件&#xff0c;网上直接能搜到&#xff0c;图标如下…...

Spring与Mybatis整合

持久层整合 1.Spring框架为什么要与持久层技术进行整合 JavaEE开发需要持久层进行数据库的访问操作 JDBC Hibernate Mybatis进行持久层开发存在大量的代码冗余 Spring基于模板设计模式对于上述的持久层技术进行了封装 2.Mybatis整合 SqlSessionFactoryBean MapperScannerConfi…...

JDBC FetchSize不生效,批量变全量致OOM问题分析

背景 一个简单的基于 JDBC 采集数据库表的功能&#xff0c;当采集 Postgre SQL 某表&#xff0c;其数据量达到 500万左右的时候&#xff0c;程序一启动就将 JVM 堆内存「6G」干满了。 问题是程序中使用了游标的只前进配置&#xff0c;且设置了 fetchSize 属性&#xff1a; q…...

docker - compose up - d`命令解释,重复运行会覆盖原有容器吗

docker - compose up - d`命令解释,重复运行会覆盖原有容器吗 docker - compose up - d 是一个用于管理 Docker 容器的命令,具体含义如下: 命令含义: up:用于创建、启动并运行容器,会根据 docker - compose.yml 文件中定义的服务配置来操作。-d:表示以“分离模式”(det…...

Python 装饰器(Decorators)

什么是装饰器&#xff1f; 装饰器&#xff08;Decorator&#xff09;本质上是一个 修改其他函数功能的函数。它的核心思想是&#xff1a;不修改原函数代码&#xff0c;动态添加新功能。比如&#xff1a; 记录函数执行时间 检查用户权限 缓存计算结果 自动重试失败操作 理解…...

A2 最佳学习方法

记录自己想法的最好理由是发现自己的想法&#xff0c;并将其组织成可传播的形式 (The best reason for recording what one thinks is to discover what one thinks and to organize it in transmittable form.) Prof Ackoff 经验之谈&#xff1a; 做培训或者写文章&#xff…...