MySQL数据库-基础篇

一、MySQL概述

  • cmd中输入services.msc可进入到系统服务中

  • 启动服务 net start mysql80

  • 停止服务 net stop mysql80

  • 客户端连接 mysql [-h 127.0.0.1] [-p 3306] -u root -p password
    []中内容可省略,默认连接本机3306端口,前提是配置了环境变量,cmd中即可连接

  • 数据模型
    image

  • MySQL为关系型数据库
    非关系型数据库一般指NoSQL。 NoSQL,泛指非关系型的数据库。

二、SQL

1.SQL通用语法

image

2.SQL分类

image

3.DDL(定义)

(1)数据库操作

  • 查询
    • 查询所有数据库 SHOW DATABASES;
    • 查询当前数据库 SELECT DATABASE();
  • 创建 CREAT DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
  • 删除 DROP DATABASE [IF EXISTS] 数据库名;
  • 使用 USE 数据库名;

(2)表操作

  • 查询

    • 查询当前数据库的所有表 SHOW TABLES;
    • 查询表结构 DESC 表名; 显示表
    • 查询指定表的建表语句 SHOW CREATE TABLE 表名; 显示表的详细信息
  • 创建

CREATE TABLE 表名(
	字段1 字段1类型[COMMENT 字段1注释],
	字段2 字段2类型[COMMENT 字段2注释],
	字段3 字段3类型[COMMENT 字段3注释],
)[COMMENT 表注释];
  • 修改

    • 添加字段 ALTER TRABLE 表名 ADD 字段名 类型(长度) [comment 注释] [约束];
    • 修改字段
      • 修改数据类型 ALTER TABLE 表名 MODFIY 字段名 新数据类型(长度);
      • 修改字段名和字段类型 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
    • 删除字段 ALTER TABLE 表名 DROP 字段名;
    • 修改表名 ALTER TABLE 表名 RENAME TO 新表名;
  • 删除

    • 删除表 DROP TABLE [IF EXIST] 表名;
    • 删除指定表,并重新创建该表 TRUNCATE TABLE 表名;

(3)数据类型

image

image

image

4.DML(增删改)

  • 添加数据

    • 给指定字段添加数据 INSERT INTO 表名 (字段名1, 字段名2,...) VALUES (值1, 值2, ...);
    • 给全部字段添加数据 INSERT INTO 表名 VALUES (值1, 值2, ...);
    • 批量添加数据
      INSERT INTO 表名 (字段名1, 字段名2,...) VALUES (值1, 值2, ...),(值1, 值2, ...),(值1, 值2, ...);
      INSERT INTO 表名 VALUES (值1, 值2, ...),(值1, 值2, ...),(值1, 值2, ...);
  • 修改数据 UPDATE 表名 SET 字段名1 = 值1, 字段值2 = 值2, ... [WHERE 条件];

  • 删除数据 DELETE FROM 表名 [WHERE 条件];
    delete不能删除某个字段的值,可以使用update

5.DQL(查询)

(1)语法(编写顺序)

image

执行顺序
image

(2)基本查询

  • 查询多个字段
    SELECT 字段1, 字段2, 字段3, ... FROM 表名;
    SELECT * FROM 表名;

  • 设置别名 SELECT 字段1 [AS 别名1], 字段2 [AS 别名2] ... FROM 表名;
    as可以省略

  • 去除重复记录 SELECT DISTINCT 字段列表 FROM 表名;

(3)条件查询

  • 语法 SELECT 字段列表 FROM 表名 WHERE 条件列表;

  • 条件 image

(4)聚合函数

image

  • 语法 SELECT 聚合函数(字段列表) FROM 表名;
    null值不参与聚合函数计算

(5)分组查询

  • 语法 SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
    where和having的区别
    执行时机不同:where是分组之前过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤
    判断条件不同,where不能对聚合函数进行判断,而having可以

(6)排序查询

  • 语法 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
    ASC 升序(可以省略,默认值) DESC 降序

(7)分页查询

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

6.DCL(控制)

管理数据库用户、控制数据库的访问权限

(1)管理用户

  • 查询用户
    USE mysql;
    SELECT * FROM user;

  • 创建用户 CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
    主机名可以使用%通配

  • 修改用户密码 ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

  • 删除用户 DROP USER '用户名'@'主机名';

(2)权限控制

  • 常用权限
    image

  • 查询权限 SHOW GRANTS FOR '用户名'@'主机名';

  • 授予权限 GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

  • 撤销权限 REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

三、函数

1.字符串函数

  • 常用
    image
    MySQL截取字符串从1开始

2.数值函数

  • 常见
    image

3.日期函数

  • 常见
    image

4.流程函数

-常见
image
''不算空

四、约束

  • 概述
    image

  • 外键约束
    image

    • 添加外键

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

    • 设置删除/更新行为
      image

      • ALTER TABLE ADD_CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主键名(主键字段名) ON UPDATE CASCADE ON DELETE CASCADE;

五、多表查询

1.多表关系

image

image

image
image

2.多表查询概述

  • 概述
    image
    image

3.内连接

  • 查询语法
    • 隐式内连接 SELECT 字段列表 FROM 表1, 表2 WHERE 条件...;
    • 显式内连接 SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;
      image
      注意:如果为表起了别名,就不能通过原表名来限制字段了

4.外连接

  • 查询语法
    • 左外连接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
      相当于查询表1(左表)的所有数据 包含表1和表2交集部分的数据

    • 右外连接 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;
      相当于查询表2(右表)的所有数据 包含表1和表2交集部分的数据
      image

5.自连接

  • 语法 SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;
    自连接查询可以是内连接查询,也可以是外连接查询

6. 联合查询

  • 语法
SELECT 字段列表 FROM 表A ...
UNION [All]
SELECT 字段列表 FROM 表B ...;

image

7.子查询

SELECT * FROM t1 WHERE cloumu1 = (SELECT column1 FROM t2);
image

  • 标量子查询
    image

  • 列子查询
    image

  • 行子查询
    image

  • 表子查询
    image

8.多表查询案例

image

六、事务

1.事务简介

image

2.事务操作

方式1(取消自动提交,手动提交)

  • 查看/设置事务提交方式
    SELECT @@autocommit;
    SET @@autocommit = 0;

  • 提交事务
    COMMIT;

  • 回滚事务
    ROLLBACK;

方式2(开启事务)

  • 开启事务
    START TRANSACTION 或 BEGIN;

  • 提交事务
    COMMIT;

  • 回滚事务
    ROLLBACK;

3.事务的四大特性

image

4.并发事务问题

image

  • 脏读
    image

  • 不可重复读
    image

  • 幻读
    image

5.事务隔离级别

image

  • 查看事务隔离级别
    SELECT @@TRANSACTION_ISOLATION;

  • 设置事务的隔离级别
    SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITED | READ COMMITED | REPEATABLE READ | SERIALIZABLE]

image

posted @ 2024-07-23 17:53  xjx111  阅读(3)  评论(0编辑  收藏  举报