MySql
2025-01-01 12:52:03 0 举报
AI智能生成
黑马mysql导图+mysql即学即用
作者其他创作
大纲/内容
1.MySQL概述
1.1 数据库相关概念
数据库(DataBase(DB))
全称:存储数据的仓库,数据是有组织的进行存储
数据库管
理系统(DataBase Management
System (DBMS))
理系统(DataBase Management
System (DBMS))
全称:操纵和管理数据库的大型软件
关系型数据库
mySQL
SQL Server
Oracle
POstgreSQL
非关系型数据库
Redis
MongoDB
SQL(Structured Query
Language (SQL))
Language (SQL))
全称:操作关系型数据库的编程语言,定义了一套操作
关系型数据库统一标准
关系型数据库统一标准
1.2MySql数据库
1.2.4 启动停止
MySQL安装完成之后,在系统启动时,会自动启动MySQL服务,我们无需手动启动了。
当然,也可以手动的通过指令启动停止,以管理员身份运行cmd,进入命令行执行如下指令:
net start mysql80
net stop mysql80
1.2.5 客户端连接
方式一:使用MySQL提供的客户端命令行工具
子主题
方式二:使用系统自带的命令行工具执行指令
2.SQL
定义:全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了
一套操作关系型数据库统一标准 。
一套操作关系型数据库统一标准 。
2.1 SQL通用语法
1). SQL语句可以单行或多行书写,以分号结尾。
2). SQL语句可以使用空格/缩进来增强语句的可读性。
3). MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
4). 注释:
单行注释:-- 注释内容 或 # 注释内容
多行注释:/* 注释内容 */
2.2 SQL分类
SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL
2.3 DDL
Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段) 。
2.3.1 数据库操作
1). 查询所有数据库
show databases ;
2). 查询当前数据库
select database() ;
3). 创建数据库
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序 规则 ] ;
案例
create database if not extists itcast;
4). 删除数据库
drop database [ if exists ] 数据库名 ;
5). 切换数据库
use 数据库名 ;
6) 修改数据库
alter database 数据库名
2.3.2 表操作
2.3.2.1 表操作-查询创建
1). 查询当前数据库所有表
show tables;
2). 查看指定表结构
desc 表名 ;
3). 查询指定表的建表语句
show create table 表名 ;
4). 创建表结构
注意: [...] 内为可选参数,最后一个字段后面没有逗号
2.3.2.2 表操作-数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
1). 数值类型
子主题
2). 字符串类型
char为定长,但比varchar性能稍高
varchar为不定长
varchar为不定长
3). 日期时间类型
子主题
2.3.2.4 表操作-修改
1). 添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
案例;ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';
2). 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);
3). 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
4). 删除字段
ALTER TABLE 表名 DROP 字段名;
5). 修改表名
ALTER TABLE 旧表名 RENAME TO 新表名;
2.3.2.5 表操作-删除
1). 删除表
DROP TABLE [ IF EXISTS ] 表名;
2). 删除指定表, 并重新创建表
TRUNCATE TABLE 表名;
注意: 在删除表的时候,表中的全部数据也都会被删除
表操作-复制
1.只复制表结构,不能复制数据
creat table ... like ...
2.同时复制结构和数据,不会复制旧表的主键、自动索引等。
creat table ... as ...
2.5 DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进
行增、删、改操作。
添加数据(INSERT)
修改数据(UPDATE)
删除数据(DELETE)
2.5.1 添加数据
1). 给指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
案例:insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,'1','Itcast','男',-1,'123456789012345678','2000-01-01');
2). 给全部字段添加数据
INSERT INTO 表名 VALUES (值1, 值2, ...);
案例:insert into employee values(2,'2','张无忌','男',18,'123456789012345670','2005-01- 01');
3). 批量添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值 1, 值2, ...) ;
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;
案例:insert into employee values(3,'3','韦一笑','男',38,'123456789012345670','2005-01- 01'),(4,'4','赵敏','女',18,'123456789012345670','2005-01-01');
注意事项:
• 插入数据时,指定的字段顺序需要与值的顺序是一一对应的
• 字符串和日期型数据应该包含在引号中。
• 插入的数据大小,应该在字段的规定范围内。
• 插入数据时,指定的字段顺序需要与值的顺序是一一对应的
• 字符串和日期型数据应该包含在引号中。
• 插入的数据大小,应该在字段的规定范围内。
2.5.2 修改数据
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
2.5.3 删除数据
DELETE FROM 表名 [ WHERE 条件 ] ;
注意事项:
• DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数
据。
• DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即 可)。
• 当进行删除全部数据操作时,datagrip会提示我们,询问是否确认删除,我们直接点击
Execute即可。
• DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数
据。
• DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即 可)。
• 当进行删除全部数据操作时,datagrip会提示我们,询问是否确认删除,我们直接点击
Execute即可。
2.6 DQL
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记
录。
查询关键字: SELECT
录。
查询关键字: SELECT
2.6.1 基本语法
我们在讲解这部分内容的时候,会将上面的完整语法进行拆分,分为以下几个部分:
基本查询(不带任何条件)
条件查询(WHERE)
聚合函数(count、max、min、avg、sum)
分组查询(group by)
排序查询(order by)
分页查询(limit)
基本查询(不带任何条件)
条件查询(WHERE)
聚合函数(count、max、min、avg、sum)
分组查询(group by)
排序查询(order by)
分页查询(limit)
2.6.2 基础查询
在基本查询的DQL语句中,不带任何的查询条件,查询的语法如下:
1). 查询多个字段
SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
SELECT * FROM 表名
注意 : * 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。
2). 字段设置别名
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;
当别名包含了保留字或者特殊符号时,必须用英文“”
例如:as “水果 葡萄”
例如:as “水果 葡萄”
3). 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
可以用于一列或者用于多列
2.6.3 条件查询
1). 语法
SELECT 字段列表 FROM 表名 WHERE 条件列表 ;
2). 条件
常用比较运算符
其中“=”只判断非null值,而"<=>"既可以判断非null还可以判断null
常用的逻辑运算符
2.6.4 聚合函数
1). 介绍
将一列数据作为一个整体,进行纵向计算 。
2). 常见的聚合函数
聚合函数一般用于select子句而不能用于where子句
3). 语法
SELECT 聚合函数(字段列表) FROM 表名 ;
注意 : NULL值是不参与所有聚合函数运算的
2.6.5 分组查询
1). 语法
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组 后过滤条件 ];
group by一般与聚合函数联系起来
2). where与having区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组
之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
having子句不能单独使用,必须结合group by子句
注意事项:
• 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
• 执行顺序: select 列名>from 表名>where 查询条件> group by 列名> having 条件>order by 列名>limit n 。
• 支持多字段分组, 具体语法为 : group by columnA,columnB
• 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
• 执行顺序: select 列名>from 表名>where 查询条件> group by 列名> having 条件>order by 列名>limit n 。
• 支持多字段分组, 具体语法为 : group by columnA,columnB
2.6.6 排序查询
排序在日常开发中是非常常见的一个操作,有升序排序,也有降序排序
1). 语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
2). 排序方式
ASC : 升序(默认值)
DESC: 降序
ASC : 升序(默认值)
DESC: 降序
注意事项:
• 如果是升序, 可以不指定排序方式ASC ;
• 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;
中文排序
MySql使用utf-8字符集,如果想用中文拼音来排序需要借助convert()函数来实现
例如:select name,price from fruit order by convert(name using gbk)
例如:select name,price from fruit order by convert(name using gbk)
2.6.7 分页查询
分页操作在业务系统开发时,也是非常常见的一个功能,我们在网站中看到的各种各样的分页条,后台
都需要借助于数据库的分页操作。
都需要借助于数据库的分页操作。
1).语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
注意事项:
• 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
• 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
• 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
2.6.9 执行顺序
子主题
2.6.10高级查询
1.模糊查询 like
-表示1个字符 %表示0个或多个字符
转义通配符:反斜杠“\”
2.随机查询rand()
需要结合order by子句使用
例:select top 5* from fruit order by newid
3.子查询
3.1 单值子查询
定义L:作为子查询的select语句返回值的结果是“单个值”
子查询几乎可以在所有子句中使用
3.2 多值子查询
in
只要存在在子结果集中便为true
all
所有记录都相同才为true
any、some
作用相同,其中=any等价于in
all、any、some这三个关键字必须和比较运算符一起使用
3.3 关联子查询
一般执行顺序
先执行子查询,后执行父查询
2.7 DCL
DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访
问权限。
问权限。
2.7.1 管理用户
1). 查询用户
select * from mysql.user;
2). 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
3). 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
4). 删除用户
DROP USER '用户名'@'主机名' ;
注意事项:
• 在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。
• 主机名可以使用 % 通配。
• 这类SQL开发人员操作的比较少,主要是DBA( Database Administrator 数据库
管理员)使用
• 在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。
• 主机名可以使用 % 通配。
• 这类SQL开发人员操作的比较少,主要是DBA( Database Administrator 数据库
管理员)使用
2.7.2 权限控制
MySQL中定义了很多种权限,但是常用的就以下几种:
子主题
1). 查询权限
SHOW GRANTS FOR '用户名'@'主机名' ;
2). 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
3). 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
3. 函数
MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数
3.1 字符串函数
3.2 数值函数
3.3 日期函数
3.4 流程函数
3.5排名函数
1.rank()
rank()函数是跳跃性的排名 如:1 1 3 4
语法:rank() over( partition by 列名 order by 列名 asc或desc)
2.row_number()
row_number()函数是用来给某一列的排序结果添加行号 如:1 2 3 4
3.dense_rank()
dense_rank()结合了rank()和row_number()的特点,它的排序数字是连续不间断的 如:1、2、2、3
3.6加密函数
MD5
md5()函数表示使用md5算法来对字符串进行加密 加密不可逆
sha1
sha1()函数表示使用sha-1技术来对字符串进行加密。sha1()比md5()更加安全,并且加密是不可逆的
4. 约束
4.1 概述
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性。
分类
自动递增
1.只能用于整数列
2.一个表中最多一个具有此属性的列
3.设置了auto_increment属性,则不能再使用defaul来指定默认值;自动从一开始递增1,且不重复;
条件检查check
语法:列名 类型 check(表达式)
唯一键
在mysql唯一键可以同时存在多个null值;但在sql server中,唯一键只能存在一个null值
主键
特点
具有唯一性
不允许为空
主键与唯一键的区别
1.主键的值不能为null,而唯一键的值可以为null
2.一个表只能有一个主键,但可以有多个唯一键
3.主键可以为外键,但唯一键不可以作为外键
4.3 外键约束
4.3.1 介绍
4.3.2 语法
1). 添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名)
REFERENCES 主表 (主表列名) ;
2). 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; 1
4.3.3 删除/更新行为
子主题
具体语法
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES
主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES
主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
5. 多表查询
5.1 多表关系
5.1.1 一对多
在多的一方添加外键,关联另外一方的主键。
5.1.2 多对多
通过中间表来维护,中间表的两个外键,分别关联另外两张表的主键。
5.1.3 一对一
在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
5.2 多表查询概述
5.2.2 概述
多表查询:指从多张表中查询数据
子主题笛卡尔积: 笛卡尔乘积是指在数学中,两个集合(A集合 和 B集合)的所有组合情况
连接查询
内连接:相当于查询A、B交集部分数据
隐式内连接:select 字段列表 from 表1 , 表2 where 条件 ... ;
显式内连接:select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 ... ;
外连接
左外连接:查询左表所有数据(包括两张表交集部分数据)
左外连接:select 字段列表 from 表1 left [ outer ] join 表2 on 连接条件 ... ;
右外连接:查询右表所有数据(包括两张表交集部分数据)
右外连接:select 字段列表 from 表1 right [ outer ] join 表2 on 连接条件 ... ;
子查询
集合运算
来拟合查询
union
union all
事务·
事务 是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作 要么同时成功,要么同时失败
(ACID)
原子性:事务是不可分割的最小单元,要么全部成功,要么全部失败
一致性:事务完成时,必须使所有的数据都保持一致状态
隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
索引
索引(index)是帮助数据库 高效获取数据 的 数据结构
优点
提高数据查询的效率,降低数据库的IO成本。
通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
缺点
索引会占用存储空间。
索引大大提高了查询效率,同时却也降低了insert、update、delete的效率
5.2.3 分类
0 条评论
下一页