• Mysql基础篇


    一、MYSQL概述

    1、数据库相关概念

    名称全称简称
    数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)
    数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)
    SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准Structured Query Language(SQL)

    2、mysql数据库

    (1)mysql下载和安装

    Mysql社区版

    (2)mysql启动

    net start mysql80
    net stop mysql80
    
    • 1
    • 2

    (3)mysql客户端连接

    1. mysql自带的客户端
    2. mysql [-h 127.0.0.1] [-p 3306] -u root -p

    (4)mysql数据模型

    关系型数据库(RDBMS)
    概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
    特点:

    1. 使用表存储数据,格式统一,便于维护
    2. 使用SQL语言操作,标准统一,使用方便

    在这里插入图片描述

    二、SQL

    1、SQL通用语言

    • sql语句可以单行或多行书写,以分号结尾。
    • sql语句可以使用空格、缩进来增强可读性。
    • Mysql的sql语句不区分大小写,关键字建议大写。
    • 注释: 单行注释 - -内容
      多行注释 /* 内容*/

    2、SQL分类

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

    3、DDL

    (1)数据库

    <1> 查询

    SHOW DATABASES;
    SHOW DATABASE();

    <2> 创建

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

    <3>删除

    DROP DATABASE [IF EXISTS] 数据库名;

    <4>使用

    USE 数据库名;

    (2)表

    <1> 查询

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

    <2>创建

    在这里插入图片描述

    <3>数据类型

    mysql中的数据类型主要分为三类:数值类型、字符串类型、日期时间类型。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    备注:
     - UNSIGNED 无符号,表示数字从0开始   eg: AGE TINYINT UNSIGNED  ---(0,255)
     - CHAR性能较好,varchar性能较差      eg:性别字段长度固定,选用char(1),不用varchar(1)
    
    
    • 1
    • 2
    • 3
    • 4

    <4>修改

    添加字段: ALTER TABLE 表名 ADD (字段 类型(长度) [COMMENT 注释]) ;
    修改字段类型: ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
    修改字段名称和类型: ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型(长度) [COMMENT 注释]);
    删除字段: ALTER TABLE 表名 DROP 字段名;
    修改表名:ALTER TABLE 表名 RENAME TO 新表名;

    <5>删除

    删除表 DROP TABLE [IF EXISET] 表名;
    删除表,并重新创建 TRUNCATE TABLE 表名;

    (3)总结

    在这里插入图片描述

    4、DML

    DML全称Data Manipulation Language(数据操作语言),用来对数据库中标的数据进行增删改操作。

    • 添加数据(INSERT)
    • 修改数据(UPDATE)
    • 删除数据(DELETE)

    (1)添加数据

    给指定字段添加数据

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

    给全部字段添加数据

    INSERT INTO 表名 VALUES(1,值2...);
    
    • 1

    批量添加数据

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

    在这里插入图片描述

    (2)修改数据

    UPDATE 表名 SET 字段名1=1,字段名2=2,字段名3=3,... [WHERE 条件];
    
    • 1

    (3)删除数据

    DELETE FROM 表名 [WHERE 条件];
    
    • 1

    在这里插入图片描述

    5、DQL

    DQL全称是Data Query Language(数据查询语言),用来查询数据库中表的记录。
    查询关键字:SELECT
    在这里插入图片描述

    (1)基本查询

    查询多个字段

    SELECT 字段1,字段2,字段3 FROM 表名;
    SELECT * FROM 表名;
    
    • 1
    • 2

    设置别名

    SELECT 字段1 AS 别名1 ,字段2 AS 别名2 FROM 表名;
    
    • 1

    去重

    SELECT DISTINCT 字段 FROM 表名;
    
    • 1

    (2)条件查询

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

    在这里插入图片描述

    (3)聚合函数

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

    函数功能
    count统计数量
    max最大值
    min最小值
    avg平均值
    sum求和

    语法如下:

    SELECT 聚合函数(字段) FROM 表名;
    
    • 1

    (4)分组查询

    语法:

    SELECT *  FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
    
    • 1

    where和having区别
    执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组之后对结果进行过滤。
    判断条件不同:where不能对聚合函数进行判断,having可以。

    注意:

    • 执行顺序:where >聚合函数 >having

    (5)排序查询

    语法

    SELECT *  FROM 表名 ORDER BY 字段名 DESC/ASC;
    
    • 1

    注意

    • 如果多字段排序,当第一个字段值相同时,才会根据第二个字段记性排序。
    • 排序方式默认值是ASC

    (6)分页查询

    语法

    SELECT *  FROM 表名 LIMIT 起始索引,查询记录数;
    
    • 1

    在这里插入图片描述

    (7)执行顺序

    在这里插入图片描述

    6、DCL

    DCL全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。

    (1)管理用户

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

    在这里插入图片描述

    (2)权限控制

    MYSQL中定义了多种权限,如下表:

    权限说明
    ALL,ALL PRIVILEGES所有权限
    SELECT查询数据
    INSERT插入数据
    UPDATE修改数据
    DELETE删除数据
    ALTER修改表
    DROP删除数据库/表/视图
    CREATE创建数据库/表

    语法:

    • 查询权限
    SHOW GRANTS FOR '用户名'@'主机名';
    
    • 1
    • 授予权限
    GRANT 权限 ON 数据库名.表名 TO '用户名'@'主机名';
    
    • 1
    • 撤销权限
    REVOKE 权限 ON 数据库名.表名 FROM '用户名'@'主机名';
    
    • 1

    注意:
    多个权限之间,使用逗号分隔;授权时,数据库名和表名可以使用* 进行通配,代表所有。

    (3)总结

    在这里插入图片描述

    三、函数

    函数是指一段可以直接被另一段程序调用的程序或代码。
    包括:

    • 字符串函数
    • 数值函数
    • 日期函数
    • 流程函数

    (1)字符串函数

    在这里插入图片描述

    (2)数值函数

    函数功能
    CEIL(X)向上取整
    FLOOR(X)向下取整
    MOD(X,Y)返回X/Y的模
    RAND()返回0~1的内的随机数
    ROUND(X,Y)参数X的四舍五入,保留Y位小数

    (3)日期函数

    函数功能
    CURDATE()返回当前日期
    CURTIME()返回当前时间
    NOW()返回当前日期和时间
    YEAR(date)获取指定date的年份
    MONTH(date)获取指定date的月份
    DAY(date)获取指定date的日期
    DATE_ADD(date,INTERVAL expr type)返回一个日期/时间加上一个时间间隔expr 后的时间值
    DATEDIFF(date1,date2)返回date1和date2之间的天数

    (4)流程函数

    在这里插入图片描述

    四、约束

    (1)概述

    概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
    目标:保证数据库中数据的正确、有效性和完整性。
    分类:

    约束关键字描述
    非空约束NOT NULL限制该字段的数据不能为null
    唯一约束UNIQUE保证该字段的所有数据都是唯一、不重复的
    主键约束PRIMARY KEY主键是一行数据的唯一标识,要求非空且唯一
    默认约束DEFAULT采用默认值
    检查约束(mysql8.0.16版)CHECK保证字段值满足一个条件
    外键约束FOREGIN KEY用来让两张表的数据之间建立连接,保证数据的一致性和完整性

    注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

    (2)约束演示

    在这里插入图片描述
    在这里插入图片描述

    (3)外键约束

    概念:外键用来让两张表的数据之间建立连接,从而保证数据可一致性和完整性。
    语法:

    • 添加外键
    CREATE TABLE 表名(
    			字段名   数据类型,
    			...
    		 [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);
    
    • 1
    • 删除外键
    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
    
    • 1
    • 删除/更新行为
      在这里插入图片描述
    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名) ON UPDATE CASCADE ON DELETE CASCADE;
    
    • 1

    (4)总结:

    • 非空约束:NOT NULL
    • 唯一约束:UNIQUE
    • 主键约束:PRIMARY KEY(自增:AUTO_INCREMENT)
    • 默认约束:DEFAULT
    • 检查约束:CHECK
    • 外键约束:FOREIGN KEY

    五、多表查询

    1、多表关系

    分为三种:

    • 一对多(多对一)
    • 多对多
    • 一对一

    (1)一对多(多对一)

    案例:部门和员工的关系
    关系:一个部门对应多个员工,一个员工对应一个部门
    实现:在多的一方监理外键,指向一的一方的主键

    (2)多对多

    案例:学生和课程的关系
    关系:一个学生可以选择多门课程,一个课程也可以供多个学生选择

    (3)一对一

    案例:用户和用户详情的关系
    关系:一对一关系,多用于单表拆分

    2、多表查询概述

    (1)概述:

    指从多张表中查询数据

    (2)笛卡尔积

    在数学中,两个集合A和B的所有组合情况(在多表查询时,需要消除无效的笛卡尔积)。
    在这里插入图片描述

    (3)多表查询分类

    
    ▷ 连接查询
    
    	→ 内连接: 相当于查询A、B交集部分数据
    	→ 外连接:
    			左外连接:查询左表所有数据,以及交集部分数据
    			右外连接:查询右表所有数据,以及交集部分数据
    	→ 自连接: 当前表和自动的连接查询,必须使用表别名
    
    ▷ 子查询
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3、内连接

    查询两张表交集的部分。
    在这里插入图片描述

    语法:

    • 隐式内连接
    SELECT 字段列表 FROM1,2 WHERE 条件;
    
    • 1
    • 显示内连接
    SELECT 字段列表 FROM1 [inner] join2 on 条件;
    
    • 1

    4、外连接

    • 左外连接
    SELECT 字段列表 FROM1 LEFT JOIN2 ON 条件;
    
    • 1
    • 右外连接
    SELECT 字段列表 FROM1 RIGHT JOIN2 ON 条件;
    
    • 1

    5、自连接

    自连接查询,可以是内连接查询,也可以是外连接查询。

    SELECT 字段列表 FROM1 别名A LEFT JOIN1 别名B ON 条件;
    
    • 1

    6、联合查询

    SELECT 字段列表 FROM 表A...
    UNION [ALL]
    SELECT 字段列表 FROM 表B... ;
    
    • 1
    • 2
    • 3

    对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
    union all会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

    7、子查询

    (1)概念

    SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

    (2)语法:

    SELECT * FROM t1 WHERE COLUMN1 = (SELECT COLUMN1 FROM t2);
    
    • 1

    子查询位置可以放在WHERE之后、FROM之后、SELECT之后。

    (3)分类:

    • 标量子查询(子查询结果为单个值)
      常用的操作符:= 、<>、 > 、>= 、<、<=
      在这里插入图片描述

    • 列子查询(子查询结果为一列)
      常用的操作符:IN 、NOT IN、ANY 、SOME 、ALL

    操作符描述
    IN在指定的集合范围内,多选一
    NOT IN不在指定的集合范围内
    ANY子查询返回列表中,有任意一个满足即可
    SOIME与ANY等同,使用SOME的地方都可以使用ANY
    ALL子查询返回列表的所有值都必须满足

    在这里插入图片描述

    • 行子查询(子查询结果为一行)
      子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
      常用的操作符:= 、<>、IN、NOT IN
      在这里插入图片描述

    • 表子查询(子查询结果为多行多列)
      子查询返回的结果是多行多列,这种子查询成称为表子查询。
      操作符:IN
      在这里插入图片描述

    六、事务

    1、事务简介

    事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
    默认Mysql的事务是自动提交的,也就是说,当执行一条DML语句,Mysql会立即隐式的提交事务。

    2、事务操作

    (1)设置手动提交

    • 查看、设置事务提交方式
    SELECT @@autocommit;
    SET @@autocommit=0;//设置手动提交
    
    • 1
    • 2
    • 提交事务
    commit;
    
    • 1
    • 回滚事务
    ROLLBACK;
    
    • 1

    (2)开启事务

    • 开启事务
    START TRANSACTION;
    
    • 1
    • 提交事务
    commit;
    
    • 1
    • 回滚事务
    ROLLBACK;
    
    • 1

    3、事务四大特性

    在这里插入图片描述

    4、并发事务问题

    问题描述
    脏读一个事务读到另一个事务还没有提交的数据
    不可重复读一个事务先后读取同一条记录,但两次读取的数据不同
    幻读一个事务按照条件查询数据时,没有对应的数据行,但在插入数据时,又发现这行数据已经存在

    5、事务隔离级别

    隔离级别脏读不可重复读幻读读
    Read uncommitted
    Read committed×
    Repeatable Read(默认)××
    Serializable×××

    在这里插入图片描述

    七、总结

    在这里插入图片描述

  • 相关阅读:
    php+mysql计算机公共课在线学习网站
    30出头成为复旦博导,陈思明:敲代码和写诗,我两样都要
    剑指 Offer 04. 二维数组中的查找
    bandit agent下棋AI(python编写) 通过强化学习RL 使用numpy
    【Java】智慧医院绩效考核系统源码
    zookeeper安装教程(Windows)
    WordPress主题 酱茄免费主题
    三菱FX3U系列—原点回归指令
    OpenCV(三十六):霍夫直线检测
    设计模式之单例模式(2)
  • 原文地址:https://blog.csdn.net/qq_38618691/article/details/125870868