mysql中的通用语法及分类

MySQL 是一种广泛使用的关系型数据库管理系统(RDBMS),其语法设计遵循 SQL 标准,但也有一些特有的扩展。以下从​​通用语法规范​​和​​SQL 语句分类​​两个维度系统梳理 MySQL 的核心语法体系。

一、MySQL 通用语法规范

通用语法是编写 SQL 语句时需遵守的基础规则,确保 MySQL 能正确解析和执行代码。

1. 注释(Comments)

用于解释代码逻辑,不会被 MySQL 执行。支持三种注释方式:

  • ​单行注释​​:以 --# 开头(-- 后需至少一个空格)。
    SELECT * FROM users; -- 查询所有用户(-- 后有空格)
    SELECT * FROM users; # 另一种单行注释方式
  • ​多行注释​​:以 /* 开头、*/ 结尾,可跨越多行。
    /*功能:创建用户表作者:张三时间:2023-10-01
    */
    CREATE TABLE users (...);
2. 分隔符(Delimiter)

默认语句以分号 ; 结尾,但在定义存储过程、触发器等复合语句时,需临时修改分隔符以避免冲突。

DELIMITER $$  -- 将分隔符临时改为 $$
CREATE PROCEDURE GetUser()
BEGINSELECT * FROM users;
END$$
DELIMITER ;  -- 恢复默认分隔符为 ;
3. 标识符(Identifier)

用于命名数据库对象(如数据库、表、列、索引等),需遵守以下规则:

  • ​合法字符​​:字母(a-z, A-Z)、数字(0-9)、下划线(_)、美元符号($),或 Unicode 字符(如中文)。
  • ​长度限制​​:默认最大长度为 64 字符(不同存储引擎可能略有差异,如 InnoDB 支持 64 字节,MyISAM 支持 64 字符)。
  • ​区分大小写​​:取决于操作系统(Linux 下默认区分表名大小写,Windows 不区分;列名始终不区分)。
  • ​保留字处理​​:若使用 MySQL 保留字(如 orderuser)作为标识符,需用反引号 ` 包裹。
    CREATE TABLE `order` (id INT);  -- 正确(使用反引号转义保留字)
4. 变量(Variables)

MySQL 支持多种类型的变量,用于存储临时数据或配置参数:

  • ​用户变量​​:以 @ 开头,会话级作用域(仅当前连接有效)。
    SET @username = 'admin';  -- 赋值
    SELECT @username;         -- 查询(输出 'admin')
  • ​系统变量​​:控制 MySQL 运行行为,分为全局(@@global.var_name)和会话(@@session.var_name/@@var_name)级。
    SHOW VARIABLES LIKE 'max_connections';  -- 查看全局最大连接数
    SET GLOBAL max_connections = 200;       -- 修改全局变量(需管理员权限)
  • ​局部变量​​:在存储过程、函数中使用,以 DECLARE 声明,仅在块内有效。
    DELIMITER 
CREATE PROCEDURE CalcSum(IN a INT, IN b INT, OUT sum INT)BEGINDECLARE temp INT;  -- 局部变量SET temp = a + b;SET sum = temp;END$$DELIMITER ;```#### 5. 流程控制语句
主要用于存储过程、函数、触发器等复合逻辑中,类似编程语言的控制结构:
- **条件判断**:`IF...ELSEIF...ELSE`、`CASE...WHEN...ELSE...END CASE`。```sql-- IF 示例IF score > 90 THENSET grade = 'A';ELSEIF score > 80 THENSET grade = 'B';ELSESET grade = 'C';END IF;-- CASE 示例CASE WHEN status = 1 THEN '启用'WHEN status = 0 THEN '禁用'ELSE '未知'END CASE;```
- **循环**:`LOOP`、`WHILE...DO`、`REPEAT...UNTIL...END REPEAT`。```sql-- WHILE 循环(累加 1 到 10)SET i = 1;WHILE i <= 10 DOSET sum = sum + i;SET i = i + 1;END WHILE;-- REPEAT 循环(直到条件满足)REPEATSET count = count + 1;UNTIL count >= 5 END REPEAT;```### 二、SQL 语句分类
SQL(结构化查询语言)按功能可分为五大类,MySQL 完全支持并扩展了部分语法。#### 1. DDL(数据定义语言,Data Definition Language)
用于定义或修改数据库对象(如数据库、表、索引、视图等)的结构。| 语句          | 功能描述                                                                 | 示例                                                                 |
|---------------|--------------------------------------------------------------------------|----------------------------------------------------------------------|
| `CREATE`      | 创建数据库对象(数据库、表、索引、视图等)                               | `CREATE DATABASE db1;`<br>`CREATE TABLE users (id INT PRIMARY KEY);` |
| `ALTER`       | 修改已有数据库对象的结构                                                 | `ALTER TABLE users ADD COLUMN age INT;`<br>`ALTER TABLE users DROP COLUMN age;` |
| `DROP`        | 删除数据库对象                                                           | `DROP DATABASE db1;`<br>`DROP TABLE users;`                          |
| `TRUNCATE`    | 清空表数据(比 `DELETE` 更快,且无法回滚)                               | `TRUNCATE TABLE users;`                                              |
| `COMMENT`     | 为对象添加注释                                                           | `COMMENT ON TABLE users IS '用户信息表';`(MySQL 不直接支持此语法,需通过元数据表设置) |
| `RENAME`      | 重命名对象                                                               | `RENAME TABLE old_table TO new_table;`                               |**注意**:`TRUNCATE` 与 `DELETE` 的区别:  
- `TRUNCATE` 是 DDL,直接释放表空间,不记录逐行日志(仅记录页删除),无法通过事务回滚恢复;  
- `DELETE` 是 DML,逐行删除并记录日志,可通过 `ROLLBACK` 回滚(若在事务中)。#### 2. DML(数据操作语言,Data Manipulation Language)
用于对表中的数据进行增、删、改操作(不包括查询)。| 语句          | 功能描述                                                                 | 示例                                                                 |
|---------------|--------------------------------------------------------------------------|----------------------------------------------------------------------|
| `INSERT`      | 向表中插入新数据                                                         | `INSERT INTO users (name, age) VALUES ('张三', 25);`<br>`INSERT INTO users VALUES (1, '李四', 30);`(全列插入) |
| `UPDATE`      | 修改表中已有数据                                                         | `UPDATE users SET age = 26 WHERE name = '张三';`                     |
| `DELETE`      | 删除表中符合条件的数据                                                   | `DELETE FROM users WHERE age < 18;`                                  |#### 3. DQL(数据查询语言,Data Query Language)
MySQL 中特指 `SELECT` 语句,用于从表中查询数据,是最复杂也最常用的语法。**核心语法结构**:
```sql
SELECT [DISTINCT] 列名/表达式 [AS 别名]
FROM 表名 [别名]
[WHERE 条件]
[GROUP BY 分组列 HAVING 分组过滤条件]
[ORDER BY 排序列 [ASC/DESC]]
[LIMIT 限制行数];
```**关键子句说明**:
- **`WHERE`**:过滤行(支持比较运算符、逻辑运算符、范围查询、子查询等)。  示例:`SELECT * FROM users WHERE age BETWEEN 18 AND 30 AND gender = '女';`
- **`GROUP BY`**:按列分组统计(常配合聚合函数 `COUNT`、`SUM`、`AVG` 等)。  示例:`SELECT gender, COUNT(*) AS user_count FROM users GROUP BY gender;`
- **`HAVING`**:对分组后的结果过滤(与 `WHERE` 类似,但只能用于 `GROUP BY` 后)。  示例:`SELECT gender, AVG(age) AS avg_age FROM users GROUP BY gender HAVING avg_age > 25;`
- **`ORDER BY`**:按列排序(升序 `ASC` 默认,降序 `DESC`)。  示例:`SELECT * FROM users ORDER BY age DESC, name ASC;`
- **`LIMIT`**:限制返回行数(支持 `LIMIT n` 或 `LIMIT offset, n`)。  示例:`SELECT * FROM users LIMIT 10;`(前10行)<br>`SELECT * FROM users LIMIT 0, 10;`(同上)<br>`SELECT * FROM users LIMIT 10, 20;`(第11-30行)**高级查询**:
- **连接查询**:关联多表数据(`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`、`FULL JOIN`(MySQL 不直接支持,需用 `UNION` 模拟))。  示例:`SELECT u.name, o.order_id FROM users u LEFT JOIN orders o ON u.id = o.user_id;`
- **子查询**:嵌套 `SELECT` 语句(支持标量子查询、行子查询、列子查询、表子查询)。  示例:`SELECT name FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 1000);`
- **联合查询**:合并多个 `SELECT` 结果(`UNION` 去重,`UNION ALL` 不去重)。  示例:`(SELECT name FROM users) UNION (SELECT product_name FROM products);`#### 4. DCL(数据控制语言,Data Control Language)
用于管理数据库用户的访问权限和角色。| 语句          | 功能描述                                                                 | 示例                                                                 |
|---------------|--------------------------------------------------------------------------|----------------------------------------------------------------------|
| `GRANT`       | 授予用户或角色权限                                                       | `GRANT SELECT, INSERT ON db1.users TO 'user1'@'localhost';`          |
| `REVOKE`      | 收回已授予的权限                                                         | `REVOKE DELETE ON db1.users FROM 'user1'@'localhost';`               |
| `SET PASSWORD`| 修改用户密码                                                             | `SET PASSWORD FOR 'user1'@'localhost' = PASSWORD('new_pass');`(MySQL 5.7+ 已弃用 `PASSWORD()`,直接用 `SET PASSWORD = 'new_pass';`) |#### 5. TCL(事务控制语言,Transaction Control Language)
用于管理数据库事务(保证数据的一致性和完整性)。| 语句                | 功能描述                                                                 | 示例                                                                 |
|---------------------|--------------------------------------------------------------------------|----------------------------------------------------------------------|
| `START TRANSACTION` | 开始一个事务(等价于 `BEGIN`)                                           | `START TRANSACTION;`                                                 |
| `COMMIT`            | 提交事务(所有操作永久生效)                                             | `COMMIT;`                                                            |
| `ROLLBACK`          | 回滚事务(撤销所有未提交的操作)                                         | `ROLLBACK;`                                                          |
| `SAVEPOINT`         | 设置事务保存点(可部分回滚)                                             | `SAVEPOINT sp1;`<br>`ROLLBACK TO SAVEPOINT sp1;`(回滚到 `sp1`)     |**事务特性(ACID)**:  
- **原子性(Atomicity)**:事务中的操作要么全成功,要么全失败。  
- **一致性(Consistency)**:事务前后数据状态合法(如转账后总金额不变)。  
- **隔离性(Isolation)**:事务间互不干扰(通过隔离级别控制,如 `READ UNCOMMITTED`、`READ COMMITTED`、`REPEATABLE READ`(MySQL 默认)、`SERIALIZABLE`)。  
- **持久性(Durability)**:提交的事务数据永久保存(通过日志 `redo log` 保证)。### 三、其他高级语法
除上述基础语法外,MySQL 还支持以下高级功能:#### 1. 存储过程(Stored Procedure)
封装多条 SQL 语句,可重复调用并支持逻辑控制。
```sql
DELIMITER 

CREATE PROCEDURE GetUserCount(OUT total INT)
BEGIN
SELECT COUNT(*) INTO total FROM users;
END$$
DELIMITER ;

CALL GetUserCount(@count); -- 调用存储过程
SELECT @count; -- 输出结果


#### 2. 触发器(Trigger)
在特定事件(`INSERT`、`UPDATE`、`DELETE`)发生时自动执行的代码块。
```sql
-- 创建触发器(插入用户后记录日志)
DELIMITER 
$$
CREATE TRIGGER after_user_insert
AFTER INSERT ON users
FOR EACH ROW
BEGININSERT INTO user_log (action, user_id, create_time)VALUES ('INSERT', NEW.id, NOW());
END$$
DELIMITER ;
3. 事件(Event)

定时执行的任务(需开启事件调度器 event_scheduler)。

-- 开启事件调度器(临时生效)
SET GLOBAL event_scheduler = ON;-- 创建每日凌晨清理过期日志的事件
CREATE EVENT clean_expired_logs
ON SCHEDULE EVERY 1 DAY STARTS '2023-10-01 03:00:00'
ON COMPLETION PRESERVE
DODELETE FROM logs WHERE expire_time < NOW();
4. 窗口函数(Window Functions,MySQL 8.0+ 支持)

用于复杂数据分析(如排名、累计求和等),不改变结果集行数。

-- 计算每个部门的工资排名
SELECT name, department, salary,RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;

总结

MySQL 的语法体系以 SQL 标准为基础,结合了丰富的扩展功能。掌握通用语法(注释、分隔符、标识符等)是编写正确 SQL 的前提,而熟练使用 DDL/DML/DQL/DCL/TCL 及高级对象(存储过程、触发器等)则是实现复杂业务逻辑的关键。实际开发中需根据场景选择合适的语法和优化策略(如索引优化、批量操作等),以提升数据库性能。

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

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

相关文章

Linux-搭建NFS服务器

Linux-搭建NFS服务器前言一、网络配置二、在nfs服务器上安装nfs-utils软件包三、设置共享目录四、挂载NFS共享目录前言 NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09; 是一种分布式文件系统协议&#xff0c;最初由 Sun Microsystems 于 1984 年开发…

eslasticsearch+ik分词器+kibana

eslasticsearch 下载地址:https://www.elastic.co/cn/downloads/past-releases ik分词器 下载地址&#xff1a;https://release.infinilabs.com/analysis-ik/stable/ kibana 下载地址&#xff1a;https://www.elastic.co/cn/downloads/kibana 1、解压安装包 将下载的 zi…

SOME/IP-SD IPv4组播的通信参数由谁指定?

<摘要> 在AUTOSAR SOME/IP-SD协议中&#xff0c;组播通信参数&#xff08;地址、协议、端口&#xff09;的协商机制。其核心在于明确规定了组播流的发布者和接收者之间由谁来“指定”通信路径&#xff0c;从而确保双方能够成功会合&#xff0c;实现高效的一对多事件分发。…

新手首次操作SEO核心要点

内容概要 初次接触SEO的新手朋友们&#xff0c;面对浩瀚的网络优化知识&#xff0c;难免感到无从下手。这份2025年的零基础入门指南&#xff0c;正是为你们量身打造。它清晰地规划了学习路径&#xff0c;从最基础的网站搭建注意事项开始&#xff0c;帮助你避开常见陷阱&#xf…

AI、人工智能基础: 模型剪枝的概念与实践(PyTorch版)

胡说八道: 各位观众老爷&#xff0c;大家好&#xff0c;我是诗人啊_&#xff0c;今天和各位分享模型剪枝的相关知识和操作&#xff0c;一文速通&#xff5e; &#xff08;屏幕前的你&#xff0c;帅气低调有内涵&#xff0c;美丽大方很优雅… 所以&#xff0c;求个点赞、收藏、关…

Kubernetes 服务发现与健康检查详解

Kubernetes 提供了多种机制来管理服务发现、负载均衡和容器健康状态监控。本文将围绕以下几个方面展开&#xff1a;Service 类型&#xff1a;ClusterIP、NodePort、Headless Service、LoadBalancer&#xff08;MetallB&#xff09;Ingress 的实现原理健康检查探针&#xff1a;L…

如何规划一年、三年、五年的IP发展路线图?

‍在知识付费领域&#xff0c;规划 IP 发展路线&#xff0c;需要从短期、中期、长期不同阶段&#xff0c;系统地布局内容、运营与商业变现&#xff0c;逐步提升 IP 影响力与商业价值。一年目标&#xff1a;立足定位&#xff0c;夯实基础精准定位&#xff0c;打磨内容利用创客匠…

C++从入门到实战(二十)详细讲解C++List的使用及模拟实现

C从入门到实战&#xff08;二十&#xff09;C List的使用及模拟实现前言一、什么是List1.1 List的核心特性1.2 List与vector的核心差异1.3 List的构造、拷贝构造与析构1.3.1 常用构造函数1.3.2 析构函数1.4 List的迭代器1.4.1 迭代器类型与用法示例1&#xff1a;正向迭代器遍历…

人工智能学习:机器学习相关面试题(一)

1、 机器学习中特征的理解 def: 特征选择和降维 特征选择&#xff1a;原有特征选择出子集 &#xff0c;不改变原来的特征空间 降维&#xff1a;将原有的特征重组成为包含信息更多的特征&#xff0c; 改变了原有的特征空间降维的主要方法 Principal Component Analysis (主成…

亚马逊巴西战略升级:物流网络重构背后的生态革新与技术赋能之路

在全球电商版图中&#xff0c;拉美市场正以惊人的增长速度成为新的战略高地&#xff0c;而巴西作为其中的核心市场&#xff0c;凭借庞大的人口基数、高速发展的数字经济以及不断提升的消费能力&#xff0c;吸引着众多电商巨头争相布局。近日&#xff0c;亚马逊宣布将于2025年底…

PS自由变换

自由变换 自由变换用来对图层、选区、路径或像素内容进行灵活的像素调整。可以进行缩放、旋转、扭曲等多种操作。快捷键&#xff1a;CtrlT&#xff0c;操作完成后使用Enter键可以确认变换自由变换过程中如果出现失误&#xff0c;可以按ESC退出&#xff1b;满意可以按enter确定。…

【K8s】整体认识K8s之存储--volume

为什么要用volume&#xff1f;首先。容器崩溃或重启时&#xff0c;所有的数据都会丢失&#xff0c;我们可以把数据保存到容器的外部&#xff0c;比如硬盘nfs&#xff0c;这样&#xff0c;即使容器没了&#xff0c;数据还在&#xff1b;第二就是容器之间是隔离的。我们如果想共享…

flutter工程

安装flutter 在VSCode中安装flutter extension、flutter组件 国内源下载flutter 3.35.2的SDK&#xff0c;安装&#xff0c;官网下载不了 将flutter安装目录加入环境变量中 D:\program\flutter_sdk\flutter\bin 执行 C:\Windows\System32>flutter --version Flutter 3.35.2 •…

C/C++ 高阶数据结构 —— 二叉搜索树(二叉排序树)

​ &#x1f381;个人主页&#xff1a;工藤新一 ​ &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; ​ &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 ​ &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章…

stm32F4挂载emmc以及重定义printf

1.Cubemx SDIO USART 使用串口输出调试信息 FATFS Clock Configuration 防止堆栈溢出 2.Keil5 新建自定义文件夹及文件 将文件夹添加进工程 新建.c与.h文件&#xff0c;保存到自定义的文件夹&#xff0c;并添加到工程中 bsp_emmc.c #include "bsp_emmc.h" #include…

基于AI的大模型在S2B2C商城小程序中的应用与定价策略自我评估

摘要&#xff1a;本文聚焦电商行业&#xff0c;结合开源AI大模型与AI智能名片S2B2C商城小程序的技术特性&#xff0c;提出基于行业数据挖掘与自我评估的定价策略。通过分析行业价格分布与销量占比&#xff0c;结合商品设计、品牌创意度、商品丰富度及内功等评估指标&#xff0c…

中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G+32G_开ADB安装软件教程

中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G32G_开ADB安装软件教程简介&#xff1a;中国移动云电脑一体机-创维LB2004&#xff0c;显示器是23.8英寸1920x1080分辨率&#xff0c;安卓盒子配置是瑞芯微RK3566-四核-1.8GHz处理器-2G32G&#xff0c;预装Android11系统。具体操…

普蓝自研AutoTrack-4X导航套件平台适配高校机器人实操应用

在当前高校机器人工程、人工智能、自动化等专业的教学与科研中&#xff0c;师生们常常面临一个核心痛点&#xff1a;缺乏一套 “开箱即用、可深研、能落地” 的自主移动导航平台 —— 要么是纯仿真环境脱离实际硬件&#xff0c;要么是硬件零散需大量时间搭建&#xff0c;要么是…

2025年工会证考试题库及答案

一、单选题1.工会法人资格审查登记机关自收到申请登记表之日起(  )日内对有关申请文件进行审查&#xff0c;对审查合格者&#xff0c;办理登记手续&#xff0c;发放《工会法人资格证书》及其副本和《工会法人法定代表人证书》。A.二十B.十五C.六十D.三十答案:D 解析:第七条基…

【OpenGL】LearnOpenGL学习笔记17 - Cubemap、Skybox、环境映射(反射、折射)

上接&#xff1a;https://blog.csdn.net/weixin_44506615/article/details/150935025?spm1001.2014.3001.5501 完整代码&#xff1a;https://gitee.com/Duo1J/learn-open-gl | https://github.com/Duo1J/LearnOpenGL 一、立方体贴图 (Cubemap) 立方体贴图就是一个包含了6张2…