MySQL基础语法

1,028 阅读5分钟

SQL通用语法

  1. SQL语法可以单行写多行写,以分号结尾
  2. SQL语句可以使用空格、换行来增加语句的可读性
  3. MySQL数据库的SQL语句不区分大小写
  4. 注释:
    • 单行注释:--注释内容 或 #注释内容
    • 多行注释/**/

SQL分类

  • DDL:数据定义语言,用来定义数据库对象(数据库、表、字段)
  • DML:数据操作语言,用来对数据库表中的数据进行增删改查
  • DQL:数据库查询语言,用来查询数据库中表的记录
  • DCL:数据库控制语言,用来创建数据库用户、控制数据库的访问权限

DDL-数据库操作

  • 查询

    1. 查询所有数据库:SHOW DATABASES;
    2. 查询当前数据库:SELECT DATABASE();
    3. 创建:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
    **注意**:设置字符集是建议使用utf8md4,不建议设置成utf8,utf8存储汉字长度是3,数据库中有些特殊字符占4个字节
    
    create database if not exists db_mdbname default charset utf8md4;
    
  • 删除:DROP DATABASE [IF EXISTS] 数据库名;

  • 使用:USE [数据库名];

  • DDL-表操作-查询

    • 查询当前数据库所有表:SHOW TABLES;
    • 表结构查询:DESC 表名;
    • 查询指定表的创建语句:SHOW CREATE TABLE 表名;

DDL-表操作-创建

    CREATE TABLE 表名(
        字段1 字段1类型[CONNENT 字段1注释],
        字段2 字段2类型[CONNENT 字段2注释],
        字段3 字段3类型[CONNENT 字段3注释],
        ...
        字段n 字段4类型[CONNENT 字段n注释]
        )[COMMENT 表注释];
    }

DDL-表操作-数据类型

  • 分类:数值类型、字符串、日期时间

  • 数值类型:TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)、BIGINT、FLOAT、DOUBLE、DECIMAL、BIGDECIMAL

  • 字符串:CHAR、VARCHAR、TINYBLOB、TINYTEXT、BLOB、TEXT、MEDIUMBLOB、MEDIUNTEXT、LONGBLOB、LONGTEXT

  • 日期时间:DATE、TIME、YEAR、DATETIME、TIMESTAMP

DDL-表操作-修改

  • 添加字段:ALERT TABLE 表名 ADD 字段名 字段类型(长度) [COMMENT 注释] [约束];
  • 修改数据类型:ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
  • 修改字段名、字段类型:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
  • 删除字段:ALTER TABLE 表名 DROP 字段名;
  • 修改表名:ALTER TABLE 表名 RENAME TO 新表名;
  • 删除表:DROP TABLE IF EXISTS 表名;
  • 删除并重建该表:TRUNCATE TABLE 表名;

DML添加数据(INSERT)

  • 给指定字段添加数据:INSERT INTO 表名(字段1,字段2,字段3...) VALUE (值1,值2,值3...);

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

  • 批量添加字段:

    INSERT INTO 表名(字段1,字段2,字段3...) VALUE (值1,值2,值3...),(值1,值2,值3...),(值1,值2,值3...);
    
    INSERT INTO 表名 VALUE (值1,值2,值3...),(值1,值2,值3...),(值1,值2,值3...);
    
  • 注意:

    1. 插入字段时,指定的字段顺序需要与值的顺序一致
    2. 字符串和日期类型数据应该包含在引号中
    3. 插入的数据大小,应该在字段的规定范围内
  • 修改数据(UPDATE):UPDATE 表名 SET 字段名1=值1, 字段名2=值2, 字段名3=值3... [WHERE条件];

  • 删除数据(DELETE):DELETE FROM 表名 [WHERE条件]

DQL编写顺序

    SELECT 字段列表 FROM 表名 WHERE条件
     GROUP BY 分组字段列表 
     HAVING分组后条件列表 
     ORDER BY 排序字段列表 
     LIMIT 分页数

DQL基本查询

  • 查询多个字段:SELECT 字段1, 字段2,... FROM 表名; SELECT * FROM 表名;
  • 设置别名:SELECT 字段1 AS [别名1], 字段2 AS [别名2], ... FROM 表名;
  • 去除重复记录:SELECT DISTINCT 字段1, 字段2,... FROM 表名;

条件查询(WHERE)

  • 语法
  • 条件:比较运算符、逻辑运算符、正则

聚合查询(COUNT/MAX/MIN/AVG/SUM)

  • 聚合函数:将一列数据作为一个整体,进行纵向计算。count、max、min、avg、sum
  • 语法:SELECT 聚合函数(字段列表) FROM 表名;
  • 注意:null值不参与聚合函数运算

分组查询(GROUP BY)

  • 语法:SELECT 字段列表 FROM 表名 WHERE条件 GROUP BY 分组字段名 HAVING 分组后过滤条件;

  • WHERE 与 HAVING 的区别:

    1. 执行时机不同:WHERE是分组之前过滤,不满足条件不参与分组,HAVING是分组之后对结果进行过滤
    2. 判断条件不同:WHERE不能对聚合函数进行判断,而HAVING可以

排序查询(ORDER BY)

  • 语法:SELECT 字段列表 FROM 表名 WHERE条件 ORDER BY 字段1 排序方式1, 字段2 排序方式2, ...;
  • 排序方式:ASC 升序(默认),DESC降序

分页查询(LIMIT)

  • 语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引, 记录数

  • 注意:

    1. 起始索引从0开始
    2. 不同数据库分页关键字不同,MySQL是LIMIT
    3. 查询第一页时,起始索引可以省略
  • DQL 执行顺序:FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT

DCL-管理用户

  • 查询用户
USE mysql;
SELECT * FROM USER;
  • 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIDE BY '密码';
  • 修改密码
ALTER USER '用户名'@'主机名' IDENTIFIDE WITH mysql_native_password BY '新密码';
  • 删除用户
DROP USER '用户名'@'主机名';

DCL-权限管理

  1. ALL, ALL PRIVILEGES 所有权限
  2. SELECT 查询数据
  3. INSERT 插入数据
  4. UPDATE 修改数据
  5. DELETE 删除数据
  6. ALTER 修改表
  7. DROP 删除数据库、表、视图
  8. CREATE 创建数据库、表
  • 查询权限:SHOW GRANTS FOR '用户名'@'主机名';
  • 授予权限:GRANTS 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
  • 撤销权限:REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
  • 注意:多个权限之间用逗号分隔,授权时数据库和表名可以使用*进行通配,代表所有。