当前位置: 首页 > news >正文

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

文章目录

  • 一、基本规则
  • 二、标识符规则
  • 三、数据类型
  • 四、运算符
  • 五、关键字
  • 六、SQL 语句的通用语法结构

历史文章点击👉: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`
  • 数据库名
    • 规则与表名和列名类似。
    • 区分大小写(取决于操作系统)。

三、数据类型

分类数据类型描述示例
整数类型TINYINT8位有符号整数,范围为-128到127;无符号范围为0到255。TINYINT(4)
SMALLINT16位有符号整数,范围为-32768到32767;无符号范围为0到65535。SMALLINT(6)
MEDIUMINT24位有符号整数,范围为-8388608到8388607;无符号范围为0到16777215。MEDIUMINT(9)
INTINTEGER32位有符号整数,范围为-2147483648到2147483647;无符号范围为0到4294967295。INT(11)
BIGINT64位有符号整数,范围为-9223372036854775808到9223372036854775807;无符号范围为0到18446744073709551615。BIGINT(20)
浮点数类型FLOAT[(M,D)]单精度浮点数,存储近似值。可选精度M和小数位数DFLOAT(5,2)
DOUBLE[(M,D)]DOUBLE PRECISION双精度浮点数,存储近似值。可选精度M和小数位数DDOUBLE(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-DDDATE
TIME时间值,格式为HH:MM:SSTIME
DATETIME日期和时间值,格式为YYYY-MM-DD HH:MM:SSDATETIME
TIMESTAMP时间戳,范围为1970-01-01 00:00:012038-01-19 03:14:07TIMESTAMP
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检查值是否为NULLSELECT * FROM table_name WHERE column IS NULL;
IS NOT NULL检查值是否不为NULLSELECT * 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;
OFFSETLIMIT一起使用,跳过指定数量的记录。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,
        ...
    );
    

相关文章:

  • 【redis】事务
  • Reflect.get和target[key]有何不同?
  • C++学习之QT高级
  • FPGA前端设计适合哪些人学?该怎么学?
  • 越早越好!8 个反直觉的金钱真相|金钱心理学
  • System 类的核心 API
  • Deepseek应用技巧-chatbox搭建前端问答
  • 语音识别-FunASR-docker部署-【超简洁步骤】
  • Manus:成为AI Agent领域的标杆
  • 题解:CF633D Fibonacci-ish
  • 如何安装MySQL,以及数据库表格创建并插入数据
  • 微前端如何拯救大型项目
  • Sglang部署大模型常用参数详解
  • 《 PyQt5》—— 创建 Python GUI(图形用户界面)
  • 《PyQt5》——设计Python GUI(图形用户界面)实例
  • 开关模式电源转换器 EMI/EMC 的集成仿真
  • 查看电脑信息
  • STM32的Systick定时器的作用
  • 每日一题——只出现一次的数字
  • vue3:一文理解h函数的使用
  • 2025年上海科技节开幕,人形机器人首次登上科学红毯
  • 新任重庆市垫江县委副书记刘振已任县政府党组书记
  • 竞彩湃|欧联杯决赛前,曼联、热刺继续划水?
  • 美国务卿鲁比奥抵达会场,将参加俄乌会谈
  • 银行积分大幅贬值遭质疑,涉及工行、中行、农行等
  • 董军同德国国防部长举行会谈