MySQL数据库基础【超详细!!!】收藏这篇就够了
*MySQL** 是一个开源的、跨平台的 **关系型数据库管理系统** (RDBMS),最初由瑞典公司MySQL AB 开发,现在由 **Oracle** 维护和支持。它使用 **SQL(结构化查询语言)** 来管理和操作数据,是目前世界上**最流行**的数据库之一。MySQL 的**开源性、高性能、多引擎支持和易用性**,使其成为个人开发者、中小企业和大型互联网公司首选的数据库管理系统。
目录
一、什么是MySQL?
二、SQL语句
1、DDL
1.1 数据库相关的语句
1.1.1 创建数据库
1.1.2 打开或使用数据库
1.1.3 删除数据库
1.1.3 显示数据库
show databases;
1.2 表相关的语句
1.2.1 查看当前数据库支持的引擎
编辑
1.2.2 创建表
1.2.3 修改表
1.2.4 删除表
2、DML
2.1 插入语句
2.2 修改语句
2.3 删除语句
2.4 条件表达式
2.4.1 关系表达式
2.4.2 逻辑表达式
2.4.3 mysql条件关键字
3、DQL
3.1 普通查询语句
3.2 分组语句与聚合函数
3.3 分页语句
3.4 多表联接语句
3.5 子查询语句
4、TCL
一、什么是MySQL?
**MySQL** 是一个开源的、跨平台的 **关系型数据库管理系统** (RDBMS),最初由瑞典公司MySQL AB 开发,现在由 **Oracle** 维护和支持。它使用 **SQL(结构化查询语言)** 来管理和操作数据,是目前世界上**最流行**的数据库之一。 MySQL 的**开源性、高性能、多引擎支持和易用性**,使其成为个人开发者、中小企业和大型互联网公司首选的数据库管理系统。
其中,SQL可分为:**DQL(数据查询语句)、DDL(数据定义语句)、DML(数据操作语句)、TCL(事务控制语句)、DCL(数据控制语言)****。**
二、SQL语句
1、DDL**(数据定义语句)**
数据定义语句,全称为Data Definition Language,负责**数据库的结构定义与管理**,涵盖数据库、表、视图、索引等对象的创建、修改和删除操作。
**数据库对象**包含:数据库(database)或方案(shema)、表、视图、索引、约束、函数、存储过程、触发器、事务、用户、权限等。
1.1 数据库相关的语句
1.1.1 创建数据库
语法:
**create database \[if not exists\] <数据库名> \[options\];** **options: \[DEFAULT\] { CHARACTER SET \[=\] charset\_name | COLLATE \[=\] collation\_name }**
示例:
- 普通数据库 wifidb
create database wifidb;
- 创建数据库 wifidb, 默认指定字符集为 utf8
create database wifidb default character set utf8;
1.1.2 打开或使用数据库
语法:
**use <数据库名>;**
示例:
use wifidb;
1.1.3 删除数据库
语法:
**drop database \[if exists\] <数据库名>;**
示例:
drop database wifidb;
1.1.3 显示数据库
show databases;
1.2 表相关的语句
mysql表的引擎: InnoDB, MyISAM, Memery, CSV等。
1.2.1 查看当前数据库支持的引擎
语法:
**show engines;**
1.2.2 创建表
mysql5.7支持的数据: 数值类型(int, integer, smallint, bigint, decimal, float,double, bit)、字符串类型(char, varchar, text)、日期与时间类型(date, time, timestamp, data)。
第一种:
**用于从头定义一个新的表结构,手动指定表的字段及其属性:**CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,…)
[table_options]
[partition_options]第二种:
**从查询结果中创建一个新表并填充数据,新表的结构由查询结果推导,或者部分指定。**CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,…)]
[table_options]
[partition_options]
[IGNORE | REPLACE]
[AS] query_expression第三种:
**快速复制一个表的结构(不包含数据),适用于需要基于现有表创建一个空表的场景。**CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
{ LIKE old_tbl_name | (LIKE old_tbl_name) }
1.2.3 修改表
drop table 表名;
– 修改字段
alter table 表名 MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name];– 修改字段名
alter table 表名 CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST |AFTER col_name];– 修改表名
alter table 表名 RENAME [TO | AS] new_tbl_name;
1.2.4 删除表
drop table 表名;
– 添加字段
alter table 表名 ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name];
– 删除字段
alter table 表名 DROP [COLUMN] col_name;
2、DML**(数据操作语句)**
数据操作语句,全称为Data Manipulation Language,主要用于对**数据库中的数据**进行**增(INSERT )、删(DELETE)、改(UPDATE)**操作。
2.1 插入语句
语法:
– 单条记录插入
insert into 表名[(字段名 [,…] )] values (值 [,…]);– 批量记录插入
inert 表名[(字段名 [,…] )] values
(值 [,…]) [,
… ];
示例:
- 向t_users表中插入一条数据
insert into t_users values('disen', password('disen123'), '%');
- 批量向t_users表中插入lucy, jack, rose三个用户,口令默认为123456
insert into t_users(auth,user) values
(password('123456'), 'lucy'),
(password('123456'), 'jack'),
(password('123456'), 'rose');
2.2 修改语句
语法:
update 表名 set 字段名=值 […] [where 条件表达式];
2.3 删除语句
语法:
delete from 表名 [where 条件表达式];
示例:
- 删除t_users表中的disen用户数据
delete from t_users where user='disen';
- 清空t_users表的数据
delete from t_users;
2.4 条件表达式
2.4.1 关系表达式
字段名表达式 >|>=|<|<=|=| != 值或字段表达式;
示例:
- 查询taiyang库的student表的95031班级的所有学生
select * from student where class='95031';
- 查询taiyang库的student表的不是95031班级的所有学生
select * from student where class='95031';
- 查询taiyang库的Score成绩表的成绩高于90分的所有学生的学号、成绩、课程号
select * from score where degree > 90;
2.4.2 逻辑表达式
and 与或且
or 或
not 取反(非)
示例:
- 查询taiyang库的student表的95031班级的所有男学生
select * from student where class='95031' and ssex='男';
2.4.3 mysql条件关键字
字段名或表达式 between 开始值或表达式 and 结束值或表达式 ; 表示的[开始,结束]区间的。
字段名 in (值或表达式,…) 字段值 与 in中的值或表达式的关系为等值关系,且in中的多个值或表达式的关系为或。字段名 like 匹配表达式; 匹配表达式中的通配符: _ 一个任意字符, % 0或多个任意字符。
示例:
- 查询成绩在80到90区间的所有记录
select * from score where degree between 80 and 90;
- 查询3-245或3-105的课程成绩记录
select * from score where cno in ('3-245', '3-105');
- 查询姓名中第二个字是"军"的所有学生
select * from student having sname like '_军%';
3、DQL**(数据查询语句)**
数据查询语句,全称为Data Query Language,用于**从数据库中检索数据**,核心是**SELECT**语句。查询可以结合过滤、排序、分组、聚合函数等操作,帮助用户提取所需信息。
3.1 普通查询语句
语法:
select [distinct] *|字段表达式 from 表名 [as 别名] [where 语句] [group by 语句][having 语句] [order by 语句] [limit 语句];
字段表达式: {
字段名或表达式 [ [as] 别名] [, …]
}
示例:
- 查看student表,输出的字段名包含"姓名"、“性别”
select sname "姓名", ssex "性别" from student;
- 统计student表中所有班级名称, 要求只显示班级编号的后2位
select distinct substr(class, char_length(class)-1) as class from student;
3.2 分组语句与聚合函数
分组语句:
分组语句用于将查询结果按照一个或多个列的值进行分组,使得相同值的行被归为一组。这样可以对每个组分别进行聚合计算,从而得到更有意义的统计信息。
【要求】在group by 语句的字段,必然在select语句中非使用聚合函数, 另外在select语句未使用聚合函数的字段必然在group by 语句中。
语法:
select 字段表达式 from 表名 group by 字段名或表达式 [, …] [having 条件表达式];
聚合函数:
聚合函数是对一组数据进行计算并返回一个单一值的函数,它可以对表中的数据进行汇总、统计等操作。
常见的聚合函数:
count() 统计行数,不会统计null , 常用count(1), 避免遇到NULL。
sum() 求和
min() 求最小
max() 求最大
avg() 求平均
示例:
- 查看每门课程的平均成绩、最高成绩、最低成绩, 且按平均成绩从高到低排序。
select
cno,
round(avg(degree),1) as avg,
round(max(degree),1) as max,
round(min(degree),1) as min
from score
group by cno
order by avg DESC;
- 查看每位学生的平均成绩,且只看平均成绩高于80分的。
【注意】having主要用于聚合字段的条件,可替换where
select sno, round(avg(degree), 1) as avg_score from score
group by sno
having avg_score > 80;
3.3 分页语句
分页之前一般先排序!!!
语法:
limit n; 只显示前n行
limit offset, rowsize; 从offset 行号开始显示rowsize条记录【重要!!!】
行号从0开始的
offset = (page - 1) * rowsize;
示例:
- 显示平均成绩最高的学生信息
select sno, round(avg(degree), 1) as avg_score from score
group by sno
order by avg_score DESC
limit 1;
- 分页设计,每页显示2条,要求显示出第3页的数据
select * from student
limit 4,2;
3.4 多表联接语句
多表联接方式:
等值连接(内联接)
where 等值条件
join on
nature join (自然连接, 要求两个连接表的具有相同意义的字段名)
外连接(左外连接、右外连接、全外连接)
left join on
right join on
nature left join
nature right join
两个表连接时,可能会出现笛卡尔(乘)积,如表1的记录数数n, 表2的记录数为m, 连接之后的结果为m\*n条件。
语法:
select 表1名.*|字段名或表达式 [, 表2名.*|字段名 …]
from 表1 , 表2
where 表1.字段名 = 表2.字段名;select 表1名.*|字段名或表达式 [, 表2名.*|字段名 …]
from 表1
[natural] [left|right] join 表2 [on 表1.字段名 = 表2.字段名]
[natural] [left|right] [join … ]
[where …]
[group by…]
[…]
示例:
- 查询每位学生的各科成绩信息,显示姓名、课程名和成绩
select s.sname, c.cname, sc.degree
from student s
natural join score sc
natural join course c;
- 统计每门课的学生成绩的名次
select cno, sno, degree
from score
order by cno, degree desc;
@变量:
只适合有序数据的排序
select cno, sno, degree, @i:=@i+1 as rank
from score, (select @i:=0) a
order by cno, degree desc;
一个表两次查询:
select a.cno, a.sno, a.degree,count(b.sno)+1 as rank
from score a
left join score b on a.cno = b.cno and a.degree < b.degree
group by a.cno, a.sno, a.degree
order by a.cno, a.degree desc;
3.5 子查询语句
select语句可以作为条件表达式的右值,也可以作为子表与其它表进行连接,总体来说,子查询即为其它SQL的语句一部分,主要用于select语句。即select语句中又包含select语句,被包含的select语句称之为子查询语句。
语法:
select … from …
join (select … from … ) 别名select … from …
where 字段名 =|>|<|…|in (select 字段名 from … where 条件);
非in 要求子查询必须是单列单行, in 子查询必须是单列(可以包含多行)
- 低于平均成绩的所有学生的学号、课程号和成绩
select * from score
where degree < (select avg(degree) from score);
- 查询最高成绩的学生的信息
select a.*,b.degree from student a natural join score b
where b.degree = (select max(degree) from score );
- 显示每位学生的信息和最高/最低/平均成绩
select a.*, b.max_, b.min_, b.avg_
from student a
natural join (
select sno, max(degree) max_, min(degree) min_, avg(degree) avg_
from score
group by sno
) b
order by b.avg_ desc;
4、TCL**(事务控制语句)**
事务控制语句,全称为 Transaction Control Language,用于**管理事务**,保证数据库操作的一致性和完整性,确保一组相关操作要么全部成功执行,要么全部失败回滚。
begin; 开始事务
commit; 提交事条, 开启事务之后的所有操作则提交
rollback; 回滚事务,取消开启事务之后的所有操作
rollback to 保存点名称; 回滚到保存还原点之前的事务状态
savepoint 保存点名称;
【注】开始事务之后,如果执行了DDL语句,则会自动提交事务
5、DCL(数据控制语言)
数据控制语言,全称为,主要用于控制数据库**用户的访问权限和数据的安全性**,确保数据库的访问和操作符合安全策略。
GRANT:用于向用户或角色授予对数据库对象的访问权限。
例如,
GRANT SELECT, INSERT ON employees TO user1语句会授予户user1对employees表的查询和插入权限,使其能够执行相应的操作。REVOKE:用于撤销用户或角色对数据库对象的访问权限。
例如,
REVOKE INSERT ON employees FROM user1语句会撤销用户user1对employees表的插入权限,限制其对该表的操作范围。

黑客/网络安全学习包


资料目录
-
成长路线图&学习规划
-
配套视频教程
-
SRC&黑客文籍
-
护网行动资料
-
黑客必读书单
-
面试题合集
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
**

**
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
更多推荐




所有评论(0)