【MySQL_05】语法简述(是语法,不详细介绍各种语句)

发布于:2025-03-14 ⋅ 阅读:(19) ⋅ 点赞:(0)

历史文章点击👉:SQL

🐈‍⬛github:https://github.com/mysql

💻官网: https://www.mysql.com

🌏维基百科:https://zh.wikipedia.org/wiki/MySQL

MySQL的语法主要遵循SQL标准。

简单说明,有些内容后面特定章节介绍。

一、基本规则

☘️ (1) SQL语句的基本结构

MySQL语句通常以关键字(如SELECTINSERTUPDATE等)开头,以分号(;)结尾。例如:

SELECT * FROM table_name;

☘️ (2) 大小写敏感性

  • 关键字(如SELECTFROMWHERE等):不区分大小写,SELECTselect是等效的。
  • 数据库名、表名和字段名
    • 默认情况下,表名和数据库名在Windows系统中不区分大小写;
    • 但在Linux系统中区分大小写。
    • 字段名通常不区分大小写。

☘️ (3) 注释

  • 单行注释--#
    -- 这是单行注释
    SELECT * FROM table_name;  # 这也是单行注释
    
  • 多行注释/* */
    /*
    这是多行注释
    可以包含多行内容
    */
    SELECT * FROM table_name;
    

☘️ (4)字符串和日期

  • 字符串:用单引号(')或双引号(")括起来。例如:
    'Hello, world!'"Hello, world!"
    
  • 日期和时间:通常用YYYY-MM-DDYYYY-MM-DD HH:MM:SS格式表示。例如:
    '2025-03-10''2025-03-10 12:34:56'
    

二、标识符规则

  • 表名和列名
    • 可以由字母、数字、下划线 (_) 组成。
    • 必须以字母或下划线开头。
    • 不能与 MySQL 的关键字冲突(如 SELECTFROM)。
    • 如果与关键字冲突,可以用反引号包裹,例如:`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)
INTINTEGER 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:012038-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,
        ...
    );