# MySQL教程 - 3 SQL语法规则

SQL 语法有一系列规则和规范,这些规则帮助确保 SQL 代码的正确性和可读性。以下是一些关键的 SQL 语法规则。

# 3.1 SQL中的注释

注释主要是用来解释 SQL 语句的作用,注释不会被 SQL 解释器执行,主要用于提高代码的可读性和可维护性。

在 SQL 中,可以使用以下两种方式来添加注释:

  • 单行注释
  • 多行注释

# 1 单行注释

使用 -- 来表示单行注释。-- 后面的内容会被认为是注释,直到行末。

举个栗子:

-- 这是一条单行注释
SELECT * FROM employee;
1
2

单行注释:适用于对某一行或单个 SQL 语句进行简单的注释。

# 2 多行注释

使用 /* */ 来表示多行注释。/**/ 之间的内容会被认为是注释,可以跨越多行。

举个栗子:

/*
这是一个多行注释
可以跨越多行
*/
SELECT * FROM employee;
1
2
3
4
5

多行注释:适用于对多行代码进行详细的说明或注释掉一大块代码。

# 3 井号注释

在 MySQL 中,# 后面的内容会被认为是注释,直到行末。

举个栗子:

# 这是一个单行注释
SELECT * FROM employee;
1
2

虽然 # 可以用于注释,但它不是所有 SQL 数据库都支持的标准注释方式。对于更广泛的兼容性,建议使用 -- 作为单行注释。

# 3.2 其他规则

# 1 命名规则

命名规则就是给数据库中表、列、索引等起名字的规则。

一般来说,名称可以包含字母、数字和下划线,但不能以数字开头,且不能是 SQL 中的保留字。多个单词组成的名称,通常可使用下划线分隔,如 customer_order

例如:my_database是一个有效的数据库名称,而 1database 则无效。


保留字在 SQL 中有特殊的含义和作用,我们不能使用保留字来作为库、表、列等名称,但是名称中可以包含保留字。

以下是一些常见的 SQL 保留字:

保留字 保留字 保留字 保留字 保留字
SELECT INSERT UPDATE DELETE CREATE
DROP ALTER TRUNCATE FROM WHERE
JOIN ORDER GROUP HAVING DISTINCT
UNION ALL AND OR NOT
IN LIKE IS NULL TRUE
FALSE BETWEEN EXISTS CASE WHEN
THEN END AS ON USING
INTO VALUES SET PRIMARY FOREIGN
KEY CHECK DEFAULT CONSTRAINT INDEX
VIEW DATABASE TABLE INNER OUTER
LEFT RIGHT FULL CROSS NATURAL
IF ELSE BEGIN END TRANSACTION
COMMIT ROLLBACK SAVEPOINT GRANT REVOKE
DENY EXEC PROCEDURE FUNCTION DECLARE
CURSOR FETCH OPEN CLOSE LOOP
BREAK CONTINUE RETURN CASE EXCEPTION

注意:不同的数据库存在差异,也不用特意去记,你以后会用到上面的保留字,自然不能用来做标识符。

# 2 语句结束符

SQL语句通常以分号(;)作为结束符,用于标识一个 SQL 语句的结束。

举个栗子:

# 一条sql语句
SELECT * FROM employee;

# 又一条sql语句
INSERT INTO employee (name, email) VALUES ('foooor', 'foooor1024@qq.com');
1
2
3
4
5

上面的语句先不用理解作用。

# 3 大小写不敏感

SQL对大小写不敏感,这意味着在SQL语句中使用的关键字(例如SELECT、FROM等)、表名、列名和数据值的大小写并不重要。例如,以下两个SQL语句是等价的:

SELECT * FROM Employee WHERE Name = 'Germany';
# 等价于
select * from employee where name = 'Germany';
1
2
3

上面的语句先不用理解作用。

# 4 字符串

SQL 中的字符串用于表示文本数据,在 SQL 语句中需要用单引号(')括起来。例如:'Hello World'

举个栗子:

INSERT INTO messages (content) VALUES ('Hello, World');
1

上面的语句先不用理解作用。


如果字符串中包含单引号呢?那么可以使用 \ 进行转义:

INSERT INTO messages (content) VALUES ('Hello, it\'s nice to meet you!');
1

# 5 反引号

如果 SQL 语句中的标识符确实用到了 SQL 的保留字,那么可以使用反引号(`)(英文模式下,键盘上1左边的键)来避免冲突。

举个栗子:

CREATE TABLE `select` (
    `student-id` INT NOT NULL,
    `order` INT NOT NULL,
    `group` VARCHAR(100) NOT NULL
);
1
2
3
4
5

上面是一个创建表的语句,先不用理解。

上面的列子中 selectordergroup 都是 SQL 的保留关键字,student-id 包含特殊字符,但通过反引号包裹,它们可以正常作为表名和列名使用。虽然反引号能解决问题,但是还是推荐使用简单标准的命名方式

反引号是 MySQL 的特定语法,其他数据库(如 SQL Server、PostgreSQL)中通常使用双引号(")作为引用标识符的符号。