SQL(结构化查询语言)通常被分为四种主要类型,每种类型负责不同的数据库操作。下面我将详细介绍这四类SQL语言的语法和用途。

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

功能:定义和管理数据库对象结构(表、视图、索引等)

主要命令:

CREATE - 创建数据库对象

-- 创建数据库
CREATE DATABASE school;-- 创建表
CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age INT CHECK (age > 0),class_id INT,FOREIGN KEY (class_id) REFERENCES classes(id)
);-- 创建索引
CREATE INDEX idx_name ON students(name);-- 创建视图
CREATE VIEW student_view AS
SELECT id, name FROM students WHERE age > 10;

ALTER - 修改数据库对象

-- 添加列
ALTER TABLE students ADD COLUMN gender CHAR(1);-- 修改列类型
ALTER TABLE students MODIFY COLUMN name VARCHAR(100);-- 删除列
ALTER TABLE students DROP COLUMN gender;

DROP - 删除数据库对象

DROP TABLE IF EXISTS temp_students;
DROP VIEW student_view;

TRUNCATE - 清空表数据(保留结构)

TRUNCATE TABLE log_data;

二、DML (Data Manipulation Language) 数据操作语言

功能:操作数据库中的数据记录

主要命令:

  1. INSERT - 插入数据

-- 插入单条记录
INSERT INTO students (name, age, class_id)
VALUES ('张三', 15, 1);-- 插入多条记录
INSERT INTO students (name, age, class_id)
VALUES ('李四', 16, 1), ('王五', 14, 2);-- 从其他表插入数据
INSERT INTO graduate_students
SELECT * FROM students WHERE age > 18;

UPDATE - 更新数据

-- 更新单列
UPDATE students SET age = 16 WHERE name = '张三';-- 更新多列
UPDATE students 
SET age = age + 1, class_id = 3
WHERE id = 5;-- 使用子查询更新
UPDATE students
SET class_id = (SELECT id FROM classes WHERE name = '高三')
WHERE age > 17;

DELETE - 删除数据

-- 删除特定记录
DELETE FROM students WHERE id = 10;-- 删除所有记录
DELETE FROM temp_students;-- 使用子查询删除
DELETE FROM students
WHERE class_id IN (SELECT id FROM classes WHERE grade = '毕业班');

MERGE - 合并操作(UPSERT)

-- MySQL语法
INSERT INTO students (id, name, age)
VALUES (1, '张三', 15)
ON DUPLICATE KEY UPDATE age = 16;-- PostgreSQL语法
INSERT INTO students (id, name, age)
VALUES (1, '张三', 15)
ON CONFLICT (id) DO UPDATE SET age = 16;

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

功能:查询数据库中的数据

主要命令:

  1. SELECT - 查询数据

-- 基本查询
SELECT * FROM students;-- 条件查询
SELECT name, age FROM students WHERE age > 15;-- 排序
SELECT * FROM students ORDER BY age DESC, name ASC;-- 分组聚合
SELECT class_id, COUNT(*) as student_count, AVG(age) as avg_age
FROM students
GROUP BY class_id
HAVING COUNT(*) > 5;-- 连接查询
SELECT s.name, c.class_name
FROM students s
JOIN classes c ON s.class_id = c.id;-- 子查询
SELECT name FROM students
WHERE class_id IN (SELECT id FROM classes WHERE grade = '高一');-- 分页查询
SELECT * FROM students LIMIT 10 OFFSET 20;  -- MySQL
SELECT * FROM students OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;  -- SQL标准

WITH (CTE) - 公用表表达式

WITH top_students AS (SELECT * FROM students ORDER BY score DESC LIMIT 10
)
SELECT * FROM top_students WHERE gender = 'F';

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

功能:控制数据库访问权限和事务处理

主要命令:

  1. GRANT - 授予权限

-- 授予SELECT权限
GRANT SELECT ON students TO user1;-- 授予所有权限
GRANT ALL PRIVILEGES ON database.* TO 'admin'@'localhost';-- 授予特定列权限
GRANT SELECT (name, age), UPDATE (age) ON students TO teacher_role;

REVOKE - 撤销权限

-- 撤销权限
REVOKE INSERT ON students FROM user2;-- 撤销所有权限
REVOKE ALL PRIVILEGES ON database.* FROM 'old_admin'@'localhost';

COMMIT - 提交事务

BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

ROLLBACK - 回滚事务

BEGIN TRANSACTION;
DELETE FROM orders WHERE status = 'pending';
-- 发现错误
ROLLBACK;

SAVEPOINT - 设置保存点

BEGIN TRANSACTION;
INSERT INTO log (message) VALUES ('Operation started');
SAVEPOINT sp1;
UPDATE data SET value = 10 WHERE id = 1;
-- 部分回滚
ROLLBACK TO SAVEPOINT sp1;
COMMIT;

五、四种语言对比总结

类别全称主要功能常用命令特点
DDLData Definition Language定义数据结构CREATE, ALTER, DROP, TRUNCATE自动提交,不可回滚
DMLData Manipulation Language操作数据记录INSERT, UPDATE, DELETE, MERGE需要显式提交,可回滚
DQLData Query Language查询数据SELECT, WITH不改变数据,只检索
DCLData Control Language权限控制GRANT, REVOKE, COMMIT, ROLLBACK管理访问和事务

六、实际应用示例

场景:学生管理系统操作

-- DDL: 创建表结构
CREATE TABLE classes (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,grade VARCHAR(20)
) ENGINE=InnoDB;-- DML: 插入班级数据
INSERT INTO classes (name, grade) VALUES 
('一班', '高一'), ('二班', '高一'), ('三班', '高二');-- DQL: 查询班级信息
SELECT * FROM classes WHERE grade = '高一';-- DML: 更新班级信息
UPDATE classes SET grade = '高三' WHERE name = '三班';-- DCL: 创建用户并授权
CREATE USER 'teacher'@'%' IDENTIFIED BY 'password';
GRANT SELECT, UPDATE ON school.students TO 'teacher'@'%';
GRANT SELECT ON school.classes TO 'teacher'@'%';-- DDL: 添加索引提高查询性能
CREATE INDEX idx_class_grade ON classes(grade);-- 事务处理示例 (DCL)
BEGIN TRANSACTION;-- DML: 转班操作UPDATE students SET class_id = 2 WHERE id = 101;UPDATE class_stats SET student_count = student_count - 1 WHERE class_id = 1;UPDATE class_stats SET student_count = student_count + 1 WHERE class_id = 2;
COMMIT;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94443.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94443.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94443.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP-idf框架下的HTTP服务器\HTML 485温湿度采集并长传

项目描述:本项目采用485采集温湿度以及电压电流等,485模块分别为下图,串口转485模块采用自动收发模块,ESP32工作在AP热点模式,通过手机连接esp32的热点来和esp进行数据通讯,使用esp32作为HTTP服务器缺陷:项目的最终HTML页面代码可发给AI让其写注释#include "freertos/Free…

雅江工程解锁墨脱秘境:基础条件全展示(区位、地震、景点、天气)

目录 前言 一、区位信息 1、空间位置 2、区位介绍 二、地震信息 1、历史地震信息 2、5.0级以上大地震 三、景点信息 1、景点列表分布 2、4A级以上景点 四、天气信息 1、天气实况 2、天气应对挑战 五、总结 前言 相信最近大家对雅江电站的超级大工程项目应该有所耳…

​​机器学习贝叶斯算法

​​一、引言​​在当今机器学习领域,贝叶斯算法犹如一颗璀璨的明星。你是否想过,垃圾邮件过滤系统是如何准确判断一封邮件是否为垃圾邮件的呢?这背后可能就有贝叶斯算法的功劳。今天,我们就一同走进贝叶斯算法的世界,…

Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)

以【5 Stage pipeline CPU】搜索图片,选取5幅有代表性的图列举如下,并结合Chisel代码进行理解和点评。 图1:原文链接如下 https://acsweb.ucsd.edu/~dol031/posts/update/2023/04/10/5stage-cpu-pipeline.html 点评:黑色的部分…

Docker容器中文PDF生成解决方案

在Docker容器中生成包含中文内容的PDF文件时,经常遇到中文字符显示为方块或乱码的问题。本文将详细介绍如何在Docker环境中配置中文字体支持,实现完美的中文PDF生成。 问题现象 当使用wkhtmltopdf、Puppeteer或其他PDF生成工具时: 中文字符…

2.java集合,线程面试题(已实践,目前已找到工作)

1线程的创建方式 继承Thread类实现Runnable接口实现Callable接口 2.这三种方式在项目中的使用有哪些,一般都是怎么用的 继承thread类实现线程的方式通过实现run方法来实现线程,通过run进行线程的启用实现runnable方法实现run方法,然后通过thr…

站在前端的角度,看鸿蒙页面布局

从Web前端转向鸿蒙(HarmonyOS)开发时,理解其页面布局的相似与差异是快速上手的核心。鸿蒙的ArkUI框架在布局理念上与Web前端有诸多相通之处,但也存在关键区别。以下从五个维度系统分析: 📦 一、盒子模型&a…

JavaWeb遗传算法、TSP、模拟退火、ACO算法等实战应用

Java Web中实现遗传算法的应用 以下是关于Java Web中实现遗传算法的应用场景和实例的整理,涵盖不同领域的解决方案和实现方法: 遗传算法基础结构 在Java Web中实现遗传算法通常需要以下核心组件: 种群初始化:随机生成初始解集。 适应度函数:评估个体优劣。 选择操作:轮…

【图像算法 - 09】基于深度学习的烟雾检测:从算法原理到工程实现,完整实战指南

一、项目背景与需求 视频介绍 【图像算法 - 09】基于深度学习的烟雾检测:从算法原理到工程实现,完整实战指南今天我们使用深度学习来训练一个烟雾明火检测系统。这次我们使用了大概一万五千张图片的数据集训练了这次的基于深度学习的烟雾明火检测模型&a…

间接制冷技术概念及特征

1、基本概念 (1)间接制冷技术即二次制冷技术。常规做法:二次冷却液储液罐增加放置于制冷系统管路,促使冷量再快捷的传递给载冷剂,继而载冷剂冷量促使冷库达到制冷效果。间接制冷技术:通过常压的二次冷却介质进行大循环传送冷量,在直接制冷剂不易应用的位置或者不可运用直…

Antlr学习笔记 01、maven配置Antlr4插件案例Demo

文章目录前言源码插件描述pom引入插件案例:实现hello 标识符 案例1、引入Antlr4的pom运行依赖2、定义语义语法,配置.g4文件实现java代码3、编写完之后,执行命令实现编译4、编写单测测试使用参考文章资料获取前言 博主介绍:✌目前…

PostGIS面试题及详细答案120道之 (101-110 )

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

第十七天:原码、反码、补码与位运算

原码、反码、补码与位运算 一、原码、反码、补码 1、原码 定义:原码是一种简单的机器数表示法。对于一个有符号整数,最高位为符号位, 0 表示正数, 1 表示负数,其余位表示数值的绝对值。示例:以 8 位二进制…

一次完整的 Docker 启动失败排错之旅:从 `start-limit` 到 `network not found

一次完整的 Docker 启动失败排错之旅:从 start-limit 到 network not found 你是否也曾自信地敲下 sudo systemctl start docker,却只得到一个冰冷的 failed?这是一个开发者和运维工程师都可能遇到的场景。本文将通过一个真实的排错案例&…

Tdengine 时序库年月日小时分组汇总问题

年月分组select to_char(collection_time ,"yyyy-mm") AS date, cast(SUM(a.stage_value)as DOUBLE) as stage_value from TABLE GROUP BY date年月日分组select to_char(collection_time ,"yyyy-mm-dd") AS date, SUM(a.stage_value)as DOUBLE) as stage_…

数据结构(01)—— 数据结构的基本概念

408前置学习C语言基础也可以看如下专栏:打怪升级之路——C语言之路_ankleless的博客-CSDN博客 目录 1. 基本概念 1.1 数据 1.2 数据元素 1.3 数据项 1.4 组合项 1.5 数据对象 1.6 数据类型 2. 数据结构 2.1 逻辑结构 2.2 存储结构 2.3 数据的运算 在学…

什么是模型并行?

模型并行c 简单来说,就是把一个模型拆开来放到多个 GPU 上,一起训练,从而化解“显存塞不下模型”的问题!更多专业课程内容可以听取工信部电子标准院《人工智能大模型应用工程师》课程获得详解!

跑yolov5的train.py时,ImportError: Failed to initialize: Bad git executable.

遇到的问题&#xff1a; Traceback (most recent call last):File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 296, in <module>refresh()File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 287…

TCP如何实现可靠传输?实现细节?

TCP如何实现可靠传输&#xff1f;实现细节&#xff1f;如何实现可靠传输&#xff1f;拥塞控制的主要机制TCP流量控制怎么实现的&#xff1f;如何实现可靠传输&#xff1f; TCP通过自身的序列号、确认应答、数据效验、超时重传、流量控制、拥塞避免&#xff0c;确保了数据传输的…

Linux 服务器性能监控、分析与优化全指南

Linux 服务器性能监控、分析与优化在现代 IT 架构中&#xff0c;Linux 服务器作为承载业务系统的核心载体&#xff0c;其性能表现直接决定了服务的稳定性、响应速度与用户体验。无论是高并发的 Web 服务、数据密集型的数据库集群&#xff0c;还是承载虚拟化平台的宿主机&#x…