SQL 语法(DDL/DML/DQL/DCL)、函数、约束、多表查询、事务

# MySQL 基础

# SQL 语法

# 数据定义(DDL)

  1. 数据库操作

    SHOW DATABASES;
    CREATE DATABASE [IF NOT EXISTS] 数据库名;
    USE 数据库名;
    SELECT DATABASE();
    DROP DATABASE [IF EXISTS] 数据库名;
  2. 表操作

    SHOW TABLES;
    CREATE TABLE 表名(字段 字段类型,字段 字段类型,...);
    DESC 表名;
    SHOW CREATE TABLE 表名;
    ALTER TABLE 表名 [ADD/MODIFY/CHANGE/DROP/RENAME TO] ...;
    DROP TABLE 表名;

# 增删改(DML)

  1. 增加数据

    INSERT INTO 表名(字段1,字段2,...) VALUES(1,2,...)[,(1,2,...)...];
  2. 修改数据

    UPDATE 表名 SET 字段1=1, 字段2=2,... [WHERE 条件];
  3. 删除数据

    DELETE FROM 表名 [WHERE 条件];

# 数据查询(DQL)

  1. DQL 语句

    SELECT 字段列表 -> 字段名[AS]别名
    FROM 表名
    WHERE 条件列表 -> (> >= < <= = <> like between...and in and or)
    GROUP BY 分组字段列表
    HAVING 分组后条件列表 -> 分组后过滤
    ORDER BY 排序字段列表 -> 升序ASC,降序DESC
    LIMIT 分页参数 -> 起始索引(从0开始),每页展示记录数

# 用户管理(DCL)

  1. 用户管路

    CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
    ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '密码';
    DROP USER '用户名'@'主机名';
  2. 权限控制

    GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
    REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

# 函数

  1. 字符串函数

    CONCAT, LOWER, UPPER, LPAD, RPAD, TRIM, SUBSTRING
  2. 数值函数

    CEIL, FLOOR, MOD, RAND, ROUND
  3. 日期函数

    CURDATE, CURTIME, NOW, YEAR, MONTH, DAY, DATE_ADD, DATEDIFF
  4. 流程函数

    IF, IFNULL, CASE [...] WHEN ... THEN ... ELSE ... END

# 约束

  1. 非空约束: NOT NULL
  2. 唯一约束: UNIQUE
  3. 主键约束: PRIMARY KEY (自增:AUTO_INCREMENT)
  4. 默认约束: DEFAULT
  5. 检查约束: CHECK
  6. 外键约束: FOREIGN KEY

# 外键约束语法

添加外键

CREATE TABLE 表名(
    字段名 数据类型,
    ...
    [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

删除 / 更新行为

行为 说明
NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与 RESTRICT 一致)
RESTRICT 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与 NO ACTION 一致)
CASCADE 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
SET NULL 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为 null(这就要求该外键允许取 null)。
SET DEFAULT 父表有变更时,子表将外键列设置成一个默认的值(Innodb 不支持)

# 多表查询

  1. 多表关系

    • 一对多:在多的一方设置外键,关联一的一方的主键
    • 多对多:建立中间表,中间表包含两个外键,关联两张表的主键
    • 一对一:用于表结构拆分,在其中任何一方设置外键(UNIQUE),关联另一方的主键
  2. 多表查询

    • 内连接

      隐式:
      SELECT...FROM 表A,表B WHERE 条件... 
      显式:
      SELECT...FROM 表A INNER JOIN 表B ON 条件...
    • 外连接

      左外:
      SELECT...FROM 表A LEFT JOIN 表B ON 条件...
      右外:
      SELECT...FROM 表A RIGHT JOIN 表B ON 条件...
    • 自连接:

      SELECT...FROM 表A 别名1,表A 别名2 WHERE 条件...
    • 子查询:标量子查询、列子查询、行子查询、表子查询

# 事务

  1. 事务简介:事务是一组操作的集合,这组操作,要么全部执行成功,要么全部执行失败。

  2. 事务操作

    START TRANSACTION;  -- 开启事务
    COMMIT/ROLLBACK;    -- 提交/回滚事务
  3. 事务四大特性
    原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

  4. 并发事务问题
    赃读、不可重复读、幻读

  5. 事务隔离级别
    READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

TagBug 微信支付

微信支付

TagBug 支付宝

支付宝