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
英文地址,請注明出處:http://en.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…