MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手

MySQL学习笔记

文章目录

    • 前言
    • 环境配置
    • 登录MySQL
    • MySQL核心文件
    • 数据类型
        • 数值类型
        • 日期类型
        • 字符串类型
    • DDl:数据定义语言
        • 显示所有数据库`SHOW DATABASES`
        • 创建数据库`CREATE DATABASE`
        • 显示数据库的创建信息`SHOW CREATE DATABASE`
        • 修改数据库`ALTER DATABASE`
        • 删除数据库`DROP DATABASE`
        • 使用数据库USE
        • 查看当前数据库SELECT DATABASE()
        • 创建表CREATE TABLE
        • 修改表`ALERT TABLE`
            • `ADD`
            • `DROP`
            • `MODIFY`
            • `CHANGE`
            • `RENAME`
    • 可视化数据库工具
    • DQL:数据查询语言
        • 前置准备
        • 查询`SELECT FROM`
        • 重命名`AS`
        • 有序查询`ORDER BY`
        • 条件查询`WHERE`
        • 逻辑`AND和OR和NOT`
        • 不等式
        • `NULL`
        • `IS`
        • 枚举`IN`
        • 模糊查询`LIKE`
        • `CASE END`
    • 时间类函数
    • 字符类函数
    • 聚合函数
    • 分组查询`GROUP BY`
    • 限定查询`LIMIT`
    • 子查询
    • 任意与存在:`ALL`与`ANY`
    • 合并查询`UNION (ALL)`
    • 表连接查询`JOIN ON`
      • 1.内连接
      • 外连接
    • DML:数据操纵语言
        • 增`INSERT INTO VALUES`
        • 删`DELETE`
        • 改`UPDATE`
        • 清空`TRUNCATE`
    • 约束
        • 主键约束PRIMARY KEY
            • 自增AUTO_INCREMENT
        • 唯一约束UNIQUE
        • 非空约束NOT NULL
        • 默认约束DEFAULT
        • 引用约束CONSTRAINT FOREIN KEY REFERENCES
    • 事务
        • 相关命令
        • 性质
    • 管理权限
        • 相关命令
    • 视图
        • 创建视图CREATE VIEW
        • 修改视图CREATE OR REPLACE VIEW
        • 修改视图ALTER VIEW
        • 删除视图DROP VIEW
        • 视图的性质总结

前言

本来学过的,结果太久没用就忘了
由于是做前端的,所这个就学个大概,笔记相对基础一点

环境配置

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第1张图片
变量名别太离谱就行,变量值是mysql的bin文件的上级目录
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第2张图片
接下来找到这个,点击编辑
在这里插入图片描述
然后点击新建
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第3张图片
然后输入bin文件路径
在这里插入图片描述

登录MySQL

win + r进入cmd窗口,进行如图所示操作在这里插入图片描述
其中-u后紧跟的是用户名,-p紧跟的是密码,这些在mysql下载安装时有配置,我这里设置的是root和root
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第4张图片
看到这一幕,说明MySQL的变量配置成功了,可以正常运行了

另外,你可以这样输入密码
在这里插入图片描述

退出是exit指令
在这里插入图片描述

MySQL核心文件

bin文件:存储命令文件
lib文件:存储库文件
include文件:存储头文件
Share文件:存储字符集、语言等信息
mysql.ini文件(隐藏文件):mysql的配置文件

了解即可,配置那些后面用可视化工具操作方便得多

数据类型

这一部分,可以暂时先跳过

数值类型

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第5张图片

日期类型

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第6张图片

字符串类型

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第7张图片

DDl:数据定义语言

(当然这个标题并不是很严谨,只是大部分都是DDI的内容)

SQL是Structured Query Language结构化查询语言
而DDL是Data Definition Language,能对数据库进行操作

注意:
1.使用SQL语句时,记得结尾加;
2.使用SQL命令之前确保数据库已经开启
3.mysql几乎不区分大小写,大部分内容最后都会统一转为小写

显示所有数据库SHOW DATABASES

显示所有的数据库
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第8张图片
这几个是系统自带的数据库,具体情况由安装的版本决定,但无论如何,不要随便去动这几个

创建数据库CREATE DATABASE

创建数据库,规范是这里要大写名字,但是实际上mysql会把名字统一转化为小写
(毕竟命令都是大写,名称又都是大写实在是不方便阅读)
在这里插入图片描述
这里创建了一个名字叫myDataBase1的数据库,并且设置它的字符集是国标码 gbk
(当然后面的CHARACTER SET gbk可以省略)

再用SHOW DATABASES查询一下
这里我漏加了;不过会提示让你补上的
在这里插入图片描述
另外,如果你不确定某个数据库是否已经存在,可以这样写
在这里插入图片描述

显示数据库的创建信息SHOW CREATE DATABASE

展示创建某个数据库时的相关信息
在这里插入图片描述

修改数据库ALTER DATABASE

修改某个数据库的某个信息
在这里插入图片描述
修改mydatabase1的字符集为utf8
注意mysql中是utf8而不是utf-8

删除数据库DROP DATABASE

删除某个数据库
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第9张图片

使用数据库USE

使用某个数据库
数据都在数据库里面,我们之前一直都在外面对众多数据库进行增删改查,还没有进去访问过
在这里插入图片描述

查看当前数据库SELECT DATABASE()

假如你不知道你正在使用哪个数据库,你就可以这么写
在这里插入图片描述
正在使用mydatabase1
如果没有使用任何数据库,那么结果是NULL
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第10张图片

那么这里我就突发奇想,数据库名字能叫NULL吗
在这里插入图片描述
果然不行。而且哪怕可以如此,数据库名字统一为小写,null仍能与NULL区分

==========================================================
接下来的DDI语句内容可以先暂时跳过,后面看完了可视化数据库工具再折回来看

创建表CREATE TABLE

CREATE TABLE `subject`(
	subjectId INT,
	`课序号` INT,
	subjectName VARCHAR(20),
	subjectHours INT
)CHARSET = utf8;

以上代码运行的创建结果如图所示
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第11张图片

修改表ALERT TABLE

ADD
ALTER TABLE `subject` ADD gradeID INT;

在这里插入图片描述

DROP

每次只能删除一列

ALTER TABLE `subject` DROP  gradeID;

在这里插入图片描述

MODIFY

修改该列的属性(不包括名称)

ALTER TABLE `subject` MODIFY subjectName VARCHAR(5) ;

修改前:
在这里插入图片描述
修改后:
在这里插入图片描述

CHANGE

修改列的名称
在这里插入图片描述

RENAME

表重命名
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第12张图片

可视化数据库工具

cmd 太丑了 数据显示不是那么直观
所以诞生了许多可视化数据库工具

比如Navicate,SQLyog,SQL_Front,HeidiSQL,DBite for SQLite等等,根据自身情况随便选一个就行

我们这里采用SQL_yog
首先新建一个链接,名字随意取
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第13张图片
然后输入 用户名 和 密码 进入
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第14张图片
好耶,这可不比cmd香得多?
而且更棒的是还支持鼠标操作
在这里插入图片描述
有了大小写自动转化,而且还有了TAB补全!
甚至只执行单条语句都不用加分号

选中一条语句,然后按下F9,就可以在下方的区域看到执行结果
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第15张图片
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第16张图片
(注意创建新的库之后要刷新一下才能显示)

并且现在可以通过#创建注释了
在这里插入图片描述

DQL:数据查询语言

hmmmmm查数据至少得先有数据吧…
那这里先用鼠标手动添加数据,或者也可以直接先去看后面的DML数据操作语言的内容

前置准备

操作数据之前我们先做一点前置准备:
鼠标创建一张表
名字是t_persons
在这里插入图片描述
然后打开表继续鼠标添加数据
在这里插入图片描述

查询SELECT FROM

最简单的查询
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第17张图片注意name是一个关键字,这里需要使用反引号(就是tab上面那个)屏蔽一下

另外,* 是所有的意思,这样写也可以
(不过这样写的话,底层还有一个展开的过程,所以执行速度会相对减慢)
在这里插入图片描述
诶等等,之前不是录入了四组数据吗,某本伟怎么不见了!
看了看才发现我没保存…不过不影响…

另外,查询语句是可以进行运算的
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第18张图片
这里就要提到一个概念:虚拟表
通过查询手段得到的新表是一个 处理过的 节选的 原表 副本,即虚拟表
所以在查询的时候对数据进行操作并不会影响到原表

重命名AS

用来给出别称的

在这里插入图片描述

有序查询ORDER BY

给查询结果排个序

ASC(可省略,默认值)升序
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第19张图片
DESC降序
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第20张图片

条件查询WHERE

条件筛选
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第21张图片

逻辑AND和OR和NOT

逻辑 且 或 非
(这里就演示一下OR,其他依葫芦画瓢)
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第22张图片

不等式

<,> , <, >=, <=, !=, <>

最后一个<>
也是不等于的意思,和!=一样MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第23张图片
另外还需要提一下的就只有
区间依旧需要分开写,然后用逻辑连接词链接
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第24张图片

NULL

空值
对于NULL值,判定不能用=或者!=以及<>
而需要用到

IS

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第25张图片

枚举IN

枚举
选出id为1或2的
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第26张图片

模糊查询LIKE

模糊查询
第一种是有限个数字符模糊,比如一个 张某
每模糊一个字符,都要在相应的位置加上一个 _
在这里插入图片描述

第二种是任意个数字符模糊
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第27张图片

CASE END

就是一个分支结构,when这里翻译为 当…时
注意别漏掉CASE前面的逗号
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第28张图片

时间类函数

这部分内容比较多,就不一一用代码演示了
以下几张图片都来自于视频截图
图片来源
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第29张图片

字符类函数

同上
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第30张图片

聚合函数

同上
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第31张图片

分组查询GROUP BY

首先给表增加一点东西
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第32张图片

SELECT `name`,COUNT(sex)
FROM t_persons 
GROUP BY sex

下表中的1,2代表1男2女
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第33张图片

限定查询LIMIT

0,2代表是从0行开始 查询2行数据(下标从0开始)
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第34张图片

子查询

其实也就是套娃
需要注意的就是注意 子查询结果 参与比较的时候 的数据类型
别用int和char比,不然只能稀里糊涂地改半天bug
1.子查询的结果是单行单列
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第35张图片
2.子查询的结果是单行多列
记得开枚举,不然你怎么用单个数据去和整个返回内容比较呢
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第36张图片
3.如果结果是多行单列

任意与存在:ALLANY

其实就是字面意思

另外,这里的sex用0,1表示的
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第37张图片
4.子查询的结果是多行多列(一张表)

注意as的作用是将整个临时的子查询结果(一张表里的数据)看做一个整体(一张表),不能少
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第38张图片

合并查询UNION (ALL)

合并指的是把 查询结果 合并,并不合并原表

再改一点数据
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第39张图片
合并的前提是,列数得相同
说白了就是把后者硬塞进前者
这是UNION
完全重复的内容直接没了
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第40张图片
这是UNION ALL
哪怕完全一样都还是保留
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第41张图片

表连接查询JOIN ON

合并查询 是 合并 查询的结果,是个动宾短语
但是表连接查询中的“表连接”是一个定语后置的倒装,
作为一个偏正短语的定语修饰省略的中心词查询(结果)…啊吧啊吧
好吧扯远了…
表连接查询是指的,先把表(暂时)合并再查询

先新建一个表叫做t_myfriends
叔叔我啊,最喜欢交朋友了
在这里插入图片描述

1.内连接

我们先来观察一下

SELECT * FROM t_persons INNER JOIN t_myfriends;

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第42张图片SELECT * FROM t_myfriends INNER JOIN t_persons
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第43张图片
唔,在不加ON的情况下,表的行数变成了2 * 3 = 6(布尔积)行,我们可以发觉,两张表合并的时候的一些规律了,

那就是取二者行数的最小公倍数作为新的行数,并且均匀复制数据到新的表中

另外,INNER JOIN 语句左边的表,就是新合成的表的左部分,语句右边的便是新表的右部分。

我们再来观察一下

SELECT * FROM t_persons 
INNER JOIN t_myfriends 
ON t_persons.`id` = t_myfriends.`id`;

SELECT * FROM t_myfriends 
INNER JOIN t_persons 
ON t_persons.`id` = t_myfriends.`id`

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第44张图片
所以ON其实就是加上了一个条件
只有两个表的id相等的数据才被放入新表,并且按照id相匹配
而且左右分布依旧遵循上文所述规则

外连接

SELECT * FROM t_persons
LEFT JOIN t_myfriends
ON t_persons.`id` = t_myfriends.`id`;

以左边的t_persons为主表,即t_persons的左外连接
在这里插入图片描述
可以看出,右边的表会适应左边的表,

SELECT * FROM t_persons
RIGHT JOIN t_myfriends
ON t_persons.`id` = t_myfriends.`id`;

SELECT * FROM t_myfriends
RIGHT JOIN t_persons
ON t_persons.`id` = t_Myfriends.`id`;

以右边的表为主表,即右外连接
(在左/右 还是由 在right join的左/右决定)
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第45张图片

DML:数据操纵语言

鼠标操作虽好,但总不能只会鼠标操作吧

INSERT INTO VALUES

INSERT INTO t_persons(id,`名字`,`name`,`性别`,sex,age)
VALUES(4,'杨掉坑','Yang Diodio','男',1,18);

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第46张图片
也就是类似于形参实参的写法

DELETE

DELETE FROM t_myfriends
WHERE `name` = 'Cherry';

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第47张图片

UPDATE

UPDATE t_persons 
SET age = 3 
WHERE `name` = 'Yang Diodio';

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第48张图片

清空TRUNCATE

清空整张表

TRUNCATE TABLE t_myfriends;

在这里插入图片描述

DELETE FROM t_myfriends;

也可以达到类似的效果,
不过truncate是销毁整张表之后重新创建一个同样格式的空表
DELETE是清空表的数据

约束

这里只介绍三种常用的约束

CREATE TABLE `全国人民身份信息`(
	`身份证号` INT PRIMARY KEY AUTO_INCREMENT,
	`名字` VARCHAR(20),
	`驾照证件号` INT UNIQUE,
	`年龄` INT
)CHARSET = utf8;

MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第49张图片

主键约束PRIMARY KEY

举个例子,当你要在全国范围内找到具体的某个人,用哪条信息找最准确呢?
如果是名字,那么重名的有很多,这样一来查询结果就不唯一。
如果用身份证号查找,那么就是唯一的。
这其实和一维数组类似,这里所说的主键类似于数组的下标。
在这里插入图片描述
主键约束不能为空,也不能重复,
可以联想数组下标,不能重复也不能为空

自增AUTO_INCREMENT

这个是主键约束的附属物
只能用于主键约束
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第50张图片
其实也是数组下标的模式,自动地依次递增

唯一约束UNIQUE

就是不能重复
比如驾驶证号,这个重复了那还得了?
在这里插入图片描述
当然也不是每个人都有驾驶证,所以可以为NULL

非空约束NOT NULL

一个人总有年龄和名字吧
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第51张图片

默认约束DEFAULT

这里多加一条
…过亿这种毕竟是少数,如果给你十三亿的数据量,给个默认值肯定会减少工作量
(但是不知道为什么感觉有点悲伤…)
MySQL数据库学习笔记:0基础入门到入坑,2小时极速上手_第52张图片

引用约束CONSTRAINT FOREIN KEY REFERENCES

直接用其他表里有的数据,不用手动重复地执行添加操作
在这里插入图片描述

CONSTRAINT fk_t_persons_sex 
FOREIGN KEY(`性别`) 
REFERENCES t_persons(sex)

也就是当前表的里 性别 这个数据
是从t_persons这张表的sex里面引用来的
,而这个引用关系我们命名为fk_t_persons_sex

其余的约束相对来说不是特别常用,所以这里就不介绍了

事务

事务就是“整体化”,就是如果其中有一条语句失败,事务内所有语句失效

相关命令

#开启事务
#事务就是“整体化”,就是如果其中有一条语句失败,事务内所有语句失效
START TRANSACTION;

#模拟借钱

#(更新id = 1的用户的账户
UPDATE account 
SET money  = money - 1000 
WHERE id = 1;

#(更新id = 2的用户的账户
UPDATE account SET money = money + 1000 WHERE id = 2;

#全部成功就提交(COMMIT)
COMMIT;

#出现失败就取消,
#然后重置到执行前的状态,
#这就叫回滚(ROLLBACK)
ROLLBACK;

如果用户1借1000块钱给用户2
第一步:用户1的账户上先减少1000
第二步:用户2的账户上再增加1000

如果第一步成功,第二步失败,用户1就会凭空少1000块,这合理吗???

但好在我们开始了事务,这使得这个事件是一个整体,一步失败则回滚事件开始之前

性质

原子性:
即不可分割,是一个整体,要么全部成功,要么全部失败
一致性:
一旦失败,操作涉及到的所有数据回会回滚到与操作前一致
隔离性:
事务开始前的状态和完成后的状态相隔离,不存在中间状态
持久性:
持久性事务完成之后,它对整个系统的影响是永久的

管理权限

相关命令

就是谁能用这个数据库,并且能用哪些操作

#创建用户
CREATE USER `Serio` 
IDENTIFIED BY '123';

#授权
GRANT ALL ON companydb.* 
TO `Serio`;

#撤销权限(和授权一样,在账户重新连接客户端后生效)
REMOVE ALL ON companydb.*
FROM `Serio`;

#删除用户
DROP USER `Serio`;

需要注意的是,撤销权限后,需要重启一次客户端才可以生效

视图

视图就是一种可以保存下来的虚拟表,说白了就有点像你把某张节选某张表的数据形成一张新的表再打印下来,打印下来这个就是视图.

可以运用在保存查询结果等方面,
然后达到简化查询的目的

创建视图CREATE VIEW

CREATE VIEW t_personsInfo
AS
SELECT `name`, age FROM t_persons;

有了这个视图,当下次你要查询name和age的时候,就不需要select写那么多字了
直接一句

select * from t_personsInfo;

修改视图CREATE OR REPLACE VIEW

顾名思义是创建或者修改视图,总结就是 覆盖

CREATE OR REPLACE VIEW t_personsInfo
AS
SELECT `名字` age FROM t_persons;

当然这也还有其他修改方式

修改视图ALTER VIEW

这个依旧是覆盖

#修改视图2
ALTER VIEW t_personsInfo
AS
SELECT `名字` age FROM t_persons;

删除视图DROP VIEW

DROP VIEW t_personsInfo;

删除也没什么好说的

视图的性质总结

形式上与表一样,主要区别在于 增 删 改
表的增删改比较自由,但是视图只能通过整体覆盖的形式来进行增删改
视图常作为表的节选内容的副本存在,方便用户找数据
但是并不会从查询速率上优化,只是单纯地减少代码量

另外,如果视图包含有 由 聚合函数、DISTINCT、GROUP BY、HAVIG UNION等语句处理过 的结果,那么视图不可更新

你可能感兴趣的:(后端,数据库,mysql)