MySQL 语法

在阅读语句语法时,应该记住以下约定

  • | 符号用来指出几个选择中的一个,因此, NULL|NOT NULL 表示或者给出 NULL 或者给出 NOT NULL 。
  • 包含在方括号中的关键字或子句(如[like this])是可选的。
  • 既没有列出所有的 MySQL 语句,也没有列出每一条子句和选项。

SQL 执行顺序

  1. (8)SELECT (9)DISTINCT (11)<Top Num> <select list>
  2. (1)FROM [left_table]
  3. (3)<join_type> JOIN <right_table>
  4. (2) ON <join_condition>
  5. (4)WHERE <where_condition>
  6. (5)GROUP BY <group_by_list>
  7. (6)WITH <CUBE | RollUP>
  8. (7)HAVING <having_condition>
  9. (10)ORDER BY <order_by_list>

上面的序号代表 SQL 在运行时,数据库底层的先后顺序,我们可以看到:
WHERE 是在 GROUP BY 之前执行的,所以 WHERE 的后面是不能使用聚合函数来进行数据过滤的,只能使用 FROM 表里的字段来进行数据过滤;
HAVING 是在 GROUP BY 之后执行的,那么这些数据就都已经分过组了的,可以使用聚合函数来进行数据的分组过滤。

INSERT

INSERT 给表增加一行。

  1. INSERT INTO tablename [(columns, ...)] VALUES(values, ...);

INSERT SELECT

INSERT SELECT 插入 SELECT 的结果到一个表。

  1. INSERT INTO tablename [(columns, ...)]
  2. SELECT columns, ... FROM tablename, ...
  3. [WHERE ...];

DELETE

DELETE 从表中删除一行或多行。

  1. DELETE FROM tablename [WHERE ...];

UPDATE

UPDATE 更新表中一行或多行。

  1. UPDATE tablename SET columname=value, ... [WHERE ...];

SELECT

SELECT 用于从一个或多个表(视图)中检索数据。

  1. SELECT columnname, ...
  2. FROM tablename, ...
  3. [WHERE ...]
  4. [UNION ...]
  5. [GROUP BY ...]
  6. [HAVING ...]
  7. [ORDER BY ...];

CREATE TABLE

CREATE TABLE 用于创建新数据库表。为更新已经存在的表的结构,
使用 ALTER TABLE 。

  1. CREATE TABLE tablename
  2. (
  3. column datatype [NULL|NOT NULL] [CONSTRAINTS],
  4. column datatype [NULL|NOT NULL] [CONSTRAINTS],
  5. ...
  6. );

CREATE INDEX

CREATE INDEX 用于在一个或多个列上创建索引。

  1. CREATE INDEX indexname ON tablename (column [ASC|DESC], ...);

CREATE PROCEDURE

CREATE PROCEDURE 用于创建存储过程。

  1. CREATE PROCEDURE procedurename([parameters])
  2. BEGIN
  3. ...
  4. END;

CREATE USER

CREATE USER 用于向系统中添加新的用户账户。

  1. CREATE USER username [@hostname] [IDENTIFIED BY [PASSWORD]'password'];

CREATE VIEW

CREATE VIEW 用来创建一个或多个表上的新视图。

  1. CREATE [OR REPLACE] VIEW viewname AS SELECT ...;

ALTER TABLE

ALTER TABLE 用来更新已存在表的模式。为了创建新表,应该使用 CREATE TABLE。

  1. ALTER TABLE tablename
  2. (
  3. ADD column datatype [NULL|NOT NULL] [CONSTRAINTS],
  4. CHANGE column columns datatype [NULL|NOT NULL] [CONSTRAINTS],
  5. DROP column,
  6. ...
  7. );

DROP

DROP 永久地删除数据库对象(表、视图、索引等)。

  1. DROP DATABASE|INDEX|PROCEDURE|TABLE|TRICGER|USER|VIEW itemname;

START TRANSACTION

START TRANSACTION 表示一个新的事务处理块的开始。

  1. START TRANSACTION;

ROLLBACK

ROLLBACK 用于撤销一个事务处理块。

  1. ROLLBACK [TO savepointname];

COMMIT

COMMIT 用来将事务处理写到数据库。

  1. COMMIT;

SAVEPOINT

SAVEPOINT 为使用 ROLLBACK 语句设立保留点。

  1. SAVEPOINT sql;