文章目錄
- 一、基本規則
- 二、標識符規則
- 三、數據類型
- 四、運算符
- 五、關鍵字
- 六、SQL 語句的通用語法結構
歷史文章點擊👉:SQL
🐈??github:https://github.com/mysql
💻官網: https://www.mysql.com
🌏維基百科:https://zh.wikipedia.org/wiki/MySQL
MySQL的語法主要遵循SQL標準。
簡單說明,有些內容后面特定章節介紹。
一、基本規則
?? (1) SQL語句的基本結構
MySQL語句通常以關鍵字(如SELECT
、INSERT
、UPDATE
等)開頭,以分號(;
)結尾。例如:
SELECT * FROM table_name;
?? (2) 大小寫敏感性
- 關鍵字(如
SELECT
、FROM
、WHERE
等):不區分大小寫,SELECT
和select
是等效的。 - 數據庫名、表名和字段名:
- 默認情況下,表名和數據庫名在Windows系統中不區分大小寫;
- 但在Linux系統中區分大小寫。
- 字段名通常不區分大小寫。
?? (3) 注釋
- 單行注釋:
--
或#
-- 這是單行注釋 SELECT * FROM table_name; # 這也是單行注釋
- 多行注釋:
/* */
/* 這是多行注釋 可以包含多行內容 */ SELECT * FROM table_name;
?? (4)字符串和日期
- 字符串:用單引號(
'
)或雙引號("
)括起來。例如:'Hello, world!' 或 "Hello, world!"
- 日期和時間:通常用
YYYY-MM-DD
或YYYY-MM-DD HH:MM:SS
格式表示。例如:'2025-03-10' 或 '2025-03-10 12:34:56'
二、標識符規則
- 表名和列名:
- 可以由字母、數字、下劃線 (
_
) 組成。 - 必須以字母或下劃線開頭。
- 不能與 MySQL 的關鍵字沖突(如
SELECT
、FROM
)。 - 如果與關鍵字沖突,可以用反引號包裹,例如:
`select`
。
- 可以由字母、數字、下劃線 (
- 數據庫名:
- 規則與表名和列名類似。
- 區分大小寫(取決于操作系統)。
三、數據類型
分類 | 數據類型 | 描述 | 示例 |
---|---|---|---|
整數類型 | TINYINT | 8位有符號整數,范圍為-128到127;無符號范圍為0到255。 | TINYINT(4) |
SMALLINT | 16位有符號整數,范圍為-32768到32767;無符號范圍為0到65535。 | SMALLINT(6) | |
MEDIUMINT | 24位有符號整數,范圍為-8388608到8388607;無符號范圍為0到16777215。 | MEDIUMINT(9) | |
INT 或 INTEGER | 32位有符號整數,范圍為-2147483648到2147483647;無符號范圍為0到4294967295。 | INT(11) | |
BIGINT | 64位有符號整數,范圍為-9223372036854775808到9223372036854775807;無符號范圍為0到18446744073709551615。 | BIGINT(20) | |
浮點數類型 | FLOAT[(M,D)] | 單精度浮點數,存儲近似值。可選精度M 和小數位數D 。 | FLOAT(5,2) |
DOUBLE[(M,D)] 或 DOUBLE PRECISION | 雙精度浮點數,存儲近似值。可選精度M 和小數位數D 。 | DOUBLE(10,4) | |
DECIMAL(precision, scale) | 定點數,存儲精確值。precision 為總位數,scale 為小數位數。 | DECIMAL(10,2) | |
字符串類型 | CHAR(length) | 定長字符串,最大長度為255字符。length 為字符數。 | CHAR(10) |
VARCHAR(length) | 變長字符串,最大長度為65535字符。length 為字符數。 | VARCHAR(255) | |
TEXT | 用于存儲大量文本數據,最大長度為65535字符。 | TEXT | |
BLOB | 用于存儲二進制數據,最大長度為65535字節。 | BLOB | |
日期和時間 | DATE | 日期值,格式為YYYY-MM-DD 。 | DATE |
TIME | 時間值,格式為HH:MM:SS 。 | TIME | |
DATETIME | 日期和時間值,格式為YYYY-MM-DD HH:MM:SS 。 | DATETIME | |
TIMESTAMP | 時間戳,范圍為1970-01-01 00:00:01 到2038-01-19 03:14:07 。 | TIMESTAMP | |
YEAR | 年份值,格式為YYYY (四位年份)。 | YEAR |
四、運算符
分類 | 運算符 | 描述 | 示例 |
---|---|---|---|
算術運算符 | + | 加法運算。 | SELECT 1 + 2; |
- | 減法運算。 | SELECT 5 - 3; | |
* | 乘法運算。 | SELECT 4 * 3; | |
/ | 除法運算,返回浮點結果。 | SELECT 10 / 2; | |
DIV | 整數除法,返回整數結果。 | SELECT 10 DIV 3; | |
% 或 MOD | 求余運算,返回除法的余數。 | SELECT 10 % 3; 或 SELECT 10 MOD 3; | |
+ 或 - | 單目運算符,用于正數或負數。 | SELECT +5; 或 SELECT -5; | |
比較運算符 | = | 等于。 | SELECT * FROM table_name WHERE column = 1; |
<> 或 != | 不等于。 | SELECT * FROM table_name WHERE column <> 1; | |
< | 小于。 | SELECT * FROM table_name WHERE column < 1; | |
> | 大于。 | SELECT * FROM table_name WHERE column > 1; | |
<= | 小于等于。 | SELECT * FROM table_name WHERE column <= 1; | |
>= | 大于等于。 | SELECT * FROM table_name WHERE column >= 1; | |
IS NULL | 檢查值是否為NULL 。 | SELECT * FROM table_name WHERE column IS NULL; | |
IS NOT NULL | 檢查值是否不為NULL 。 | SELECT * FROM table_name WHERE column IS NOT NULL; | |
IS [NOT] DISTINCT FROM | 檢查兩個值是否相同或不同(NULL 值也視為相等)。 | SELECT * FROM table_name WHERE column IS DISTINCT FROM value; | |
邏輯運算符 | AND | 邏輯“與”,表示兩個條件都為真時返回真。 | WHERE condition1 AND condition2; |
OR | 邏輯“或”,表示兩個條件中任意一個為真時返回真。 | WHERE condition1 OR condition2; | |
NOT | 邏輯“非”,用于否定條件。 | WHERE NOT condition; | |
XOR | 邏輯“異或”,表示兩個條件中只有一個為真時返回真。 | WHERE condition1 XOR condition2; | |
位運算符 | & | 位“與”,對兩個值的二進制位進行逐位“與”運算。 | SELECT 5 & 3; |
` | ` | 位“或”,對兩個值的二進制位進行逐位“或”運算。 | |
^ | 位“異或”,對兩個值的二進制位進行逐位“異或”運算。 | SELECT 5 ^ 3; | |
~ | 位“非”,對值的二進制位進行逐位取反運算。 | SELECT ~5; | |
<< | 左移運算,將值的二進制位向左移動指定的位數。 | SELECT 5 << 1; | |
>> | 右移運算,將值的二進制位向右移動指定的位數。 | SELECT 5 >> 1; | |
其他運算符 | BETWEEN | 檢查值是否在指定范圍內。 | SELECT * FROM table_name WHERE column BETWEEN value1 AND value2; |
IN | 檢查值是否在一組值中。 | SELECT * FROM table_name WHERE column IN (value1, value2, ...); | |
LIKE | 模糊匹配字符串,% 表示任意字符序列,_ 表示單個字符。 | SELECT * FROM table_name WHERE column LIKE 'pattern'; | |
REGEXP | 正則表達式匹配。 | SELECT * FROM table_name WHERE column REGEXP 'pattern'; | |
CONCAT | 字符串連接。 | SELECT CONCAT('Hello', ' ', 'World'); | |
IS [NOT] TRUE | 檢查布爾值是否為真或假。 | SELECT * FROM table_name WHERE condition IS TRUE; |
五、關鍵字
關鍵字 | 含義 | 示例 |
---|---|---|
SELECT | 從表中檢索數據。 | SELECT * FROM table_name; |
INSERT | 向表中插入新數據。 | INSERT INTO table_name VALUES (...); |
UPDATE | 更新表中的數據。 | UPDATE table_name SET column = value WHERE condition; |
DELETE | 刪除表中的數據。 | DELETE FROM table_name WHERE condition; |
CREATE | 創建數據庫、表或其他對象。 | CREATE TABLE table_name (...); |
DROP | 刪除數據庫、表或其他對象。 | DROP TABLE table_name; |
ALTER | 修改表結構(添加、刪除或修改列)。 | ALTER TABLE table_name ADD COLUMN column_name datatype; |
TRUNCATE | 清空表中的所有數據,但保留表結構。 | TRUNCATE TABLE table_name; |
FROM | 指定從哪個表中檢索數據。 | SELECT * FROM table_name; |
WHERE | 指定條件,用于過濾數據。 | SELECT * FROM table_name WHERE condition; |
AND | 用于組合多個條件,表示邏輯“與”。 | WHERE condition1 AND condition2; |
OR | 用于組合多個條件,表示邏輯“或”。 | WHERE condition1 OR condition2; |
NOT | 用于否定條件,表示邏輯“非”。 | WHERE NOT condition; |
IN | 檢查某個值是否在一組值中。 | WHERE column IN (value1, value2, ...); |
BETWEEN | 檢查某個值是否在指定范圍內。 | WHERE column BETWEEN value1 AND value2; |
LIKE | 用于模糊匹配字符串。 | WHERE column LIKE 'pattern'; |
ORDER BY | 按指定列對結果集進行排序。 | SELECT * FROM table_name ORDER BY column ASC; |
GROUP BY | 按指定列對結果集進行分組。 | SELECT column, COUNT(*) FROM table_name GROUP BY column; |
HAVING | 用于對分組后的結果進行過濾。 | SELECT column, COUNT(*) FROM table_name GROUP BY column HAVING COUNT(*) > 1; |
JOIN | 用于連接多個表。 | SELECT * FROM table1 JOIN table2 ON table1.id = table2.id; |
INNER JOIN | 返回兩個表中匹配的記錄。 | SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; |
LEFT JOIN | 返回左表的所有記錄,以及右表中匹配的記錄。 | SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id; |
RIGHT JOIN | 返回右表的所有記錄,以及左表中匹配的記錄。 | SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id; |
FULL JOIN | 返回兩個表中所有匹配和不匹配的記錄。MySQL不支持FULL JOIN ,但可以通過UNION 實現。 | SELECT * FROM table1 UNION SELECT * FROM table2; |
DISTINCT | 用于返回唯一值,去除重復行。 | SELECT DISTINCT column FROM table_name; |
AS | 用于為列或表指定別名。 | SELECT column AS alias FROM table_name AS alias; |
CASE | 用于條件表達式。 | SELECT CASE WHEN condition THEN value1 ELSE value2 END FROM table_name; |
LIMIT | 用于限制查詢結果的數量。 | SELECT * FROM table_name LIMIT 10; |
OFFSET | 與LIMIT 一起使用,跳過指定數量的記錄。 | SELECT * FROM table_name LIMIT 10 OFFSET 5; |
UNION | 用于合并兩個SELECT 語句的結果集,自動去除重復行。 | SELECT column FROM table1 UNION SELECT column FROM table2; |
UNION ALL | 用于合并兩個SELECT 語句的結果集,包含重復行。 | SELECT column FROM table1 UNION ALL SELECT column FROM table2; |
EXISTS | 檢查子查詢是否返回至少一行數據。 | SELECT * FROM table1 WHERE EXISTS (SELECT 1 FROM table2 WHERE condition); |
ANY | 用于比較子查詢返回的任意值。 | SELECT * FROM table1 WHERE column > ANY (SELECT column FROM table2); |
ALL | 用于比較子查詢返回的所有值。 | SELECT * FROM table1 WHERE column > ALL (SELECT column FROM table2); |
GRANT | 授予用戶權限。 | GRANT SELECT, INSERT ON database_name.table_name TO 'username'@'host'; |
REVOKE | 撤銷用戶權限。 | REVOKE SELECT, INSERT ON database_name.table_name FROM 'username'@'host'; |
CREATE USER | 創建新用戶。 | CREATE USER 'username'@'host' IDENTIFIED BY 'password'; |
DROP USER | 刪除用戶。 | DROP USER 'username'@'host'; |
ALTER USER | 修改用戶屬性(如密碼)。 | ALTER USER 'username'@'host' IDENTIFIED BY 'new_password'; |
COMMIT | 提交事務,使事務中的更改永久生效。 | COMMIT; |
ROLLBACK | 回滾事務,撤銷事務中的更改。 | ROLLBACK; |
START TRANSACTION | 開始一個事務。 | START TRANSACTION; |
SET | 設置變量或系統參數。 | SET @variable = value; |
DECLARE | 在存儲過程中聲明變量。 | DECLARE variable_name datatype; |
IF | 用于條件判斷。 | IF condition THEN statement; |
WHILE | 循環語句,當條件為真時重復執行。 | WHILE condition DO statement; |
LOOP | 無限循環,需要在循環體內退出。 | LOOP statement; |
REPEAT | 循環語句,直到條件為真時停止。 | REPEAT statement UNTIL condition; |
LEAVE | 退出循環。 | LEAVE loop_label; |
ITERATE | 跳過當前循環迭代,繼續下一次迭代。 | ITERATE loop_label; |
六、SQL 語句的通用語法結構
-
SELECT 語句:
SELECT column1, column2 FROM tablename WHERE condition ORDER BY column1 ASC|DESC LIMIT offset, count;
-
INSERT 語句:
INSERT INTO tablename (column1, column2) VALUES (value1, value2);
-
UPDATE 語句:
UPDATE tablename SET column1 = value1, column2 = value2 WHERE condition;
-
DELETE 語句:
DELETE FROM tablename WHERE condition;
-
CREATE TABLE 語句:
CREATE TABLE tablename (column1 datatype constraints,column2 datatype constraints,... );