MySQL学习之SQL语法及SQL解析顺序
一、SQL语法
SQL是Structured Query Language的缩写,是一种用于管理关系型数据库的计算机语言。在MySQL中,SQL是进行数据库操作最基础也最常用的语言。
SQL语法主要包含以下几个部分:
1. DDL(数据定义语言)
DDL用于定义数据库中各个元素,例如数据库本身、表、列、约束等。
常用的DDL操作有:
创建数据库
CREATE DATABASE <数据库名>;
创建表
CREATE TABLE <表名> (
<列名1> <数据类型> <NULL或NOT NULL>,
<列名2> <数据类型> <NULL或NOT NULL>,
<列名3> <数据类型> <NULL或NOT NULL>,
...
);
修改表
ALTER TABLE <表名> <操作>;
删除表
DROP TABLE <表名>;
2. DML(数据操作语言)
DML用于对表中的数据进行增删改查操作。
常用的DML操作有:
插入数据
INSERT INTO <表名> (<列名1>, <列名2>, <列名3>, ...) VALUES (<值1>, <值2>, <值3>, ...);
更新数据
UPDATE <表名> SET <列名1>=<值1>, <列名2>=<值2>, ... WHERE <条件>;
删除数据
DELETE FROM <表名> WHERE <条件>;
查询数据
SELECT <列名1>, <列名2>, ... FROM <表名> WHERE <条件> ORDER BY <排序方式>;
3. DCL(数据控制语言)
DCL用于对数据库、表、用户权限等进行控制。
常用的DCL操作有:
创建用户
CREATE USER <用户名>@<主机名> IDENTIFIED BY '<密码>';
授权用户
GRANT <权限> ON <表名> TO <用户名>@<主机名>;
撤销权限
REVOKE <权限> ON <表名> FROM <用户名>@<主机名>;
二、SQL解析顺序
当执行一条SQL语句的时候,MySQL会先对该语句进行解析,然后生成执行计划。SQL解析顺序包括以下几个步骤:
- 词法分析:将SQL语句拆分成多个标记(token)。
- 语法分析:将拆分后的标记按照SQL语法规则进行分析,生成语法树。
- 语义分析:对语法树进行语义检查,例如表名、列名是否正确,是否有访问权限等。
- 查询优化:对查询语句进行优化,生成执行计划。
- 执行计划:按照执行计划执行语句。
以下通过一个简单的示例来说明SQL解析顺序:
SELECT id, name FROM users WHERE age > 18 ORDER BY id DESC;
- 将该语句拆分成多个标记,例如SELECT、id、name、FROM、users等。
- 对标记按照SQL语法规则进行语法分析,生成语法树。
- 对语法树进行语义分析,例如检查users表是否存在、id、name是否是该表的合法列名等。
- 对查询语句进行优化,例如判断是否需要使用索引,生成执行计划。
- 按照执行计划执行语句,例如先使用age列的索引查询符合条件的行,然后按照id列降序排序,最后返回id和name两列的值。
三、示例说明
1. 创建表
下面是一个创建users表的示例:
CREATE TABLE users (
id int NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL,
age int NOT NULL,
gender enum('male', 'female') NOT NULL,
PRIMARY KEY (id)
);
该语句使用DDL去定义一个名为users的表,该表包含四个列:id、name、age、gender,其中id是自增的主键。
2. 查询数据
下面是一个查询users表中所有符合条件的行,并按照id列降序排序的示例:
SELECT id, name, gender FROM users WHERE age > 18 ORDER BY id DESC;
该语句使用DML去查询users表中符合条件age > 18的行,并只返回id、name、gender三列,按照id列降序排序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL学习之SQL语法及SQL解析顺序 - Python技术站