SQL语法

通用语法及分类

MySQL语法:

  • 可以单行或多行书写,以分号结尾

  • 可以使用空格和缩进提高可读性

  • 不区分大小写,关键字建议大写

SQL分类:

分类 全称 说明
DDL Data Definition Language 数据定义语言,用来定义数据库对象(数据库、表、字段)
DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
DQL Data Query Language 数据查询语言,用来查询数据库中表的记录
DCL Data Control Language 数据控制语言,用来创建数据库用户,控制数据库的访问权限

PS:[…]为可选参数

DDL

数据库操作:

  1. 查询

    • 查询所有数据库:

      1
      SHOW DATABASES;
    • 查询当前数据库:

      1
      SELECT DATABASE();
  2. 创建

    1
    CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
  3. 删除

    1
    DROP DATABASE[IF EXISTS] 数据库名;
  4. 使用

    1
    USE 数据库名;

表操作:

  1. 查询

    • 查询当前数据库所有表:

      1
      SHOW TABLES;
    • 查询表结构:

      1
      DESC 表名;
    • 查询指定表的建表语句:

      1
      SHOW CREATE TABLE 表名;
  2. 创建

    1
    2
    3
    4
    5
    CREATE TABLE 表名(
    字段1 字段1类型 [COMMENT 字段1注释],
    ......
    字段n 字段n类型 [COMMENT 字段n注释]
    ) [COMMENT 表注释];
    • 最后一个字段后面没有逗号

    • 添加字段

  3. 修改

    • 添加字段

      1
      ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束]
    • 修改数据类型

      1
      ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
    • 修改字段名和字段类型、

      1
      ALTER TABLE 表名 CHANEG 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
    • 修改表名

      1
      ALTER TABLE 表名 RENAME TO 新表名;
  4. 删除

    • 删除字段

      1
      ALTER TABLE 表名 DROP 字段名;
    • 删除表

      1
      DROP TABLE [IF EXISTS] 表名;
    • 删除指定表,并重新创建该表(清除数据

      1
      TRUNCATE TABLE 表名;

DML

  1. 添加数据

    • 给指定的字段添加数据

      1
      INSERT INTO 表名(字段名1,字段名2,...) VALUES (值1,值2,...);
    • 给全部字段添加数据

      1
      INSERT INTO 表名 VALUES (值1,值2,...);
    • 批量添加数据

      1
      2
      3
      INSERT INTO 表名(字段名1,字段名2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);

      INSERT INTO VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);

    注意

    • 插入数据时,指定的字符顺序一定与值的顺序是一一对应的
    • 字符串和日期型数据应该包含在引号中
  2. 修改数据

    1
    UPDATE 表名 SET 字段名1=1,字段名2=2,... [WHERE 条件];
    • 没有条件就会修改整张表的数据
  3. 删除数据

    1
    DELETE FROM 表名 [WHERE 条件];
    • 如果没有条件会删除整张表的数据

DQL

DQL编写顺序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数

DQL执行顺序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
SELECT
字段列表
ORDER BY
排序字段列表
LIMIT
分页参数
  1. 基本查询

    • 查询多个字段

      1
      SELECT 字段1,字段2,字段3,... FROM 表名;
      1
      SELECT * FROM 表名;
      • * 表示查询全部字段
    • 设置别名

      1
      SELECT 字段1 [AS 别名],字段2[AS 别名],... FROM 表名;
    • 去除重复记录

      1
      SELECT DISTINCT 字段列表 FROM 表名;
  2. 条件查询

    1
    SELECT 字段列表 FROM 表名 WHERE 条件列表;
  3. 聚合函数

    定义:将一列数据作为一个整体,进行纵向计算

    • 不计算null值

      1
      SELECT 聚合函数(字段列表) FROM 表名;
常用的聚合函数 功能
max 最大值
min 最小值
sum 求和
avg 平均值
count 统计数量
  1. 分组查询

    1
    SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字	段名 [HAVING 分组后过滤条件];
    • 不满足where条件不参与分组,且where不能对聚合函数进行判断

    • 分组后不满足having条件过滤掉

  2. 排序查询

    1
    SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2,排序方式2;
排序方式 功能
ASC 升序(默认)
DESC 降序
  1. 分页查询

    1
    SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

    注意

    1. 起始索引从0开始,$起始索引 = (查询页码 - 1)\times 每页记录数$

    2. 分页查询是数据库的方言,不同数据库有不同的实现,MySQL中是LIMIT

    3. 如果查询的是第一页数据,起始索引可以省略

DCL

管理用户

  1. 查询用户

    1
    2
    USE mysql;
    SELECT * FROM user;
  2. 创建用户

    1
    CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
    • 主机名为 localhost 或 %(任意主机)
  3. 修改用户密码

    1
    ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password '新密码';
  4. 删除用户

    1
    DROP USER '用户名'@'主机名';

权限控制

  1. 查询权限

    1
    SHOW GRANTS FOR '用户名'@'主机名';
  2. 授予权限、

    1
    GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
    • 数据库名和表名可以用 * 来表示所有
  3. 撤销权限

    1
    REVOKE 权限列表 ON 数据库名.表名 FROM'用户名'@'主机名';
    • 数据库名和表名可以用 * 来表示所有
  • 多个权限之间要用逗号分隔