数据库基础知识

数据库概述

什么是数据库?

数据库:DataBase(DB),是存储和管理数据的仓库。

数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件。

SQL:Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。

数据库产品

产品名 简介
Oracle 收费的大型数据库,Oracle公司的产品。
MySQL 开源免费的中小型数据库。Sun公司收购了MySQL,Oracle收购Sun公司。
SQL Server MicroSoft公司收费的中型的数据库。C#、.net等语言常使用。
PostgreSQL 开源免费中小型的数据库。
DB2 IBM公司的大型收费数据库产品。
SQLite 嵌入式的微型数据库。如:作为Android内置数据库
MariaDB 开源免费的中小型的数据库。

MySQL概述

MySQL安装

下载安装包地址

https://dev.mysql.com/downloads/mysql/

去安装这一个 “Windows (x86, 64-bit), ZIP Archive

201

解压

下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到MySQL 8.0.34 的软件本体了(就是一个文件夹),我们可以把它放在你想安装的位置 。

202

配置

添加环境变量

环境变量里面有很多选项,这里我们只用到Path这个参数。为什么在初始化的开始要添加环境变量呢?

在黑框(即CMD)中输入一个可执行程序的名字,Windows会先在环境变量中的Path所指的路径中寻找一遍,如果找到了就直接执行,没找到就在当前工作目录找,如果还没找到,就报错。我们添加环境变量的目的就是能够在任意一个黑框直接调用MySQL中的相关程序而不用总是修改工作目录,大大简化了操作。

添加步骤

右键**此电脑属性**,点击高级系统设置

点击环境变量

在**系统变量**中新建MYSQL_HOME

输入MySQL的安装地址

系统变量中找到并双击Path

点击新建

输入**%MYSQL_HOME%\bin**

最后点击确定。

如何验证是否添加成功?

右键开始菜单(就是屏幕左下角),选择**命令提示符(管理员),打开黑框,敲入mysql**,回车。

如果提示Can't connect to MySQL server on '``localhost``'则证明添加成功;

如果提示mysql不是内部或外部命令,也不是可运行的程序或批处理文件则表示添加添加失败,请重新检查步骤并重试。

初始化

以管理员身份运行命令窗口

203

在命令行中输入

1
mysqld --initialize-insecure

稍微等待一会,如果出现没有出现报错信息,则证明data目录初始化没有问题,此时再查看MySQL目录下已经有data目录生成。

如果出现如下问题

204

是由于权限不足导致的,以管理员方式运行 cmd

  1. 注册MySQL服务

命令行(注意必须以管理员身份启动)中,输入如下的指令,回车执行:

1
mysqld -install

205

现在你的计算机上已经安装好了MySQL服务了。

  1. 启动MySQL服务

在黑框里敲入net start mysql,回车。

1
2
3
net start mysql  // 启动mysql服务

net stop mysql // 停止mysql服务

206

  1. 修改默认账户密码

在黑框里敲入mysqladmin -u root password 1234,这里的1234就是指默认管理员(即root账户)的密码,可以自行修改成你喜欢的。

1
mysqladmin -u root password 1234

207

  1. 登录

右键开始菜单,选择命令提示符,打开黑框。

在黑框中输入,mysql -uroot -p1234,回车,出现下图且左下角为mysql>,则登录成功。

1
mysql -uroot -p1234

207

到这里你就可以开始你的MySQL之旅了!

退出mysql:

1
exit

登录参数:

1
mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
  1. 卸载

如果你想卸载MySQL,也很简单。

点击开始菜单,输入cmd,选择 “命令提示符”,选择右侧的 “以管理员身份运行”。

208

  1. 敲入net stop mysql,回车。

209

  1. 再敲入mysqld -remove mysql,回车。

210

  1. 最后删除MySQL目录及相关的环境变量。

至此,MySQL卸载完成!

MySQL连接

语法:mysql –u用户名 –p密码 [-h数据库服务器IP地址 -P端口号]

MySQL数据模型

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

特点:

使用表存储数据,格式统一,便于维护。

使用SQL语言操作,标准统一,使用方便,可用于复杂查询。

211

小结

1.什么是关系型数据库?

​ 由多张二维表组成的数据库(RDBMS)

2.数据是如何在数据库中存储的?

数据库 -> 表 -> 数据(记录)

SQL语句

SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。

分类:

212

DDL

数据库

操作语法

1
2
3
4
5
6
7
8
9
10
-- 查询所有的数据库
show databases;
-- 查询当前使用的数据库
select database();
-- 创建数据库
create database db03;
-- 选择数据库
use db01;
-- 删除数据库
drop database db03;

小结:

1.同一个数据库服务器中,数据库的名字是否可以相同?

​ •不可以

2.MySQL8版本默认的字符集是什么?

​ •utf8mb4

​ •default charset utf8mb4

MySQL客户端工具

213

下载网址:https://www.jetbrains.com/zh-cn/datagrip/

注意修改一下安装位置一键下载就可以!!!

213

表结构-创建

创建表的语法
1
2
3
4
5
6
7
8
9
-- 创建表
create table user(
id int comment '用户id,用户唯一标识',
username varchar(50) comment '用户名',
name varchar(10) comment '姓名',
age int comment '年龄',
gender char(1) comment '性别'
) comment '用户信息表';

示例如下图所示:

214

约束:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的:保证数据库中数据的正确性、有效性和完整性。

为表添加约束

215

语法示例:

1
2
3
4
5
6
7
8
-- 创建表(约束)
create table user02(
id int primary key auto_increment comment '用户id,用户唯一标识', -- 主键 主键自增
username varchar(50) not null unique comment '用户名', -- 非空 唯一
name varchar(10) not null comment '姓名', -- 非空
age int comment '年龄',
gender char(1) default '男' comment '性别' -- 默认为男
) comment '用户信息表';

小结:

  • MySQL数据库中分为哪几类约束,对应的关键字是什么?

    • primary key
    • not null
    • unique
    • default
    • foreign key

  • 如何实现主键自增的效果呢?

    • 定义主键的时候指定关键字 auto_increment
  • 一个字段上是否可以添加多个约束 ?

    • 可以,多个约束之间使用空格分开

表结构-数据类型

数据类型

MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。

数值类型:

215

字符串类型:

223

216

日期类型:

217

小结:

  • 数值类型在定义的时候,后面加了unsigned关键字是什么意思?

    • unsigned表示无符号类型,表示只能取0及正数
    • 不加默认是signed,表示可以取负数
  • char与varchar的区别是什么?什么时候用char,什么时候用varchar?

    • char是定长字符串,varchar是变长字符串
    • 如果一个字段的长度是固定的,建议使用char;如:身份证号、手机号
    • 如果一个字段的长度不是固定的,建议使用varchar;如:用户名、姓名
案例

218

218

要求:

1.阅读并分析页面原型及需求

2.分析表中包含哪些字段,以及字段的类型、约束

3.创建表结构(添加基础字段id、create_time、update_time)

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 案例:设计员工表emp
-- 基础字段:id主键 create_time创建表的时间 update_time最后修改时间
create table emp(
id int unsigned not null unique primary key auto_increment comment 'id号',
username varchar(20) not null unique comment '用户名',
password varchar(10) comment '密码',
name varchar(10) not null comment '姓名',
gender tinyint unsigned not null comment '性别 1表示男 2表示女',
phone char(11) not null unique comment '手机号',
job tinyint unsigned comment '职位 1班主任 2讲师 3学工主管 4教研主管 5咨询师',
salary int unsigned comment '薪资',
image varchar(50) comment '图片',
entry_date date comment '入职日期',
create_time datetime comment '创建表的时间',
update_time datetime comment '最后操作时间'
)comment '员工表';

表结构-查询、修改、删除

表结构的查询、修改、删除相关语法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- 查看当前数据库有哪些表
show tables;
-- 查看表结构
desc emp;
-- 查询建表结构
show create table emp;
-- 字段:添加字段qq varchar(13)
alter table emp add qq varchar(13) comment 'QQ号码';
-- 字段:修改字段类型qq varchar(15)
alter table emp modify qq varchar(15) comment 'QQ号码';
-- 字段:修改字段名qq -> qq_num varchar(15)
alter table emp change qq qq_num varchar(15) comment 'QQ号码';
-- 字段:删除字段qq_num
alter table emp drop column qq_num;
-- 修改表名
alter table emp rename to empoyee;
-- 删除表
drop table empoyee;

DML

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。

  • 添加数据(INSERT)

  • 修改数据(UPDATE)

  • 删除数据(DELETE)

DML-insert

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- DML : 插入数据 - insert
-- 1. 为 emp 表的 username, password, name, gender, phone 字段插入值
insert into emp(username,name,gender,phone) values ('liubei','刘备',1,'13365778911');

-- 2. 为 emp 表的 所有字段插入值
-- 方式一:
insert into emp(id, username, name, gender, phone, job, salary, image, entry_date, create_time, update_time) values
(null,'zhangfei','张飞',1,13365778912,2,5000,'1.jpg','2025-08-05',now(),now());
-- 方式二:
insert into emp values
(null,'guanyv','关羽',1,13365778913,2,5000,'1.jpg','2025-08-05',now(),now());


-- 3. 批量为 emp 表的 username, password, name, gender, phone 字段插入数据
insert into emp(username,name,gender,phone) values ('zhaoyv','赵云',1,'13365778914'),
('zhugeliang','诸葛亮',1,'13365778915');

注意:

1.插入数据时,指定的字段顺序需要与值的顺序是一 一对应的 。

2.字符串和日期型数据应该包含在引号中(单引号、双引号都可以)。

3.插入的数据大小/长度,应该在字段的规定范围内 。

DML-update

1
2
3
4
5
6
-- DML : 更新数据 - update
-- 1. 将 emp 表的ID为1员工 用户名更新为 'zhangsan', 姓名name字段更新为 '张三'
update emp set username = 'zhangsan',name = '张三' where id = 1;

-- 2. 将 emp 表的所有员工的入职日期更新为 '2010-01-01'
update emp set entry_date = '2010-01-01';

注意:

修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

DML-delete

1
2
3
4
5
6
-- DML : 删除数据 - delete
-- 1. 删除 emp 表中 ID为1的员工
delete from emp where id = 1;

-- 2. 删除 emp 表中的所有员工
delete from emp;

注意:

1.DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。

2.DELETE 语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。

DQL

DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。

关键字:SELECT

218

  • 基本查询(select…from…)
  • 条件查询(where)
  • 分组查询(group by)
  • 排序查询(order by)
  • 分页查询(limit)

DQL-基本查询

基础语法:

1
2
3
4
5
6
7
8
-- 查询多个字段
select 字段1,字段2,字段3 from 表名;
-- 查询所有字段(通配符)
select * from 表名;
-- 为查询字段设置别名,as关键字可以省略
select 字段1 [as 别名1], 字段2 [as 别名2] from 表名;
-- 去除重复记录
select distinct 字段列表 from 表名;

注意:

* 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)

小结

1.基本查询语法?

select 字段列表 from 表名

2.如何为查询返回的字段设置别名?

字段名 [as] 别名

3.如何去除查询返回的重复记录?

distinct

**DQL-**条件查询

1
2
-- 条件查询
select 字段列表 from 表名 where 条件列表 ;

219

小结:

1.如何进行null值的判断?

​ is null , is not null

2.模糊匹配中的通配符?

​ % (任意个字符), _(一个字符)

3.如何组装多个查询条件?

​ and / or

**DQL-**分组查询

219

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

220

语法:

1
2
3
-- 分组查询
select 字段列表 from 表名 [where 条件列表] group by 分组字段名 [having 分组后过滤条件];

注意:

1.null值不参与所有聚合函数的运算 。

2.统计数量可以使用:count() count(字段) count(常量),推荐使用count() 。

where与having的区别:

1.执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

2.判断条件不同:where不能对聚合函数进行判断,而having可以。

注意:

1.分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

2.执行顺序: where > 聚合函数 > having 。

小结:

1.DQL语句中where与having的区别?

•执行时机不同(where -> group by -> having)

•判断条件不同(having后可以用聚合函数,where不可以)

**DQL-**排序查询

1
2
-- 排序查询
select 字段列表 from 表名 [where 条件列表] [group by 分组字段名 having 分组后过滤条件] order by 排序字段 排序方式;

排序方式:升序(asc),降序(desc);默认为升序asc,是可以不写的。

注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

小结:

1.下面排序查询的语法分别代表什么意思?

… order by age;

… order by age desc, score asc;

… order by age, score, update_time desc;

**DQL-**分页查询

1
2
-- 排序查询
select 字段 from 表名 [where 条件] [group by 分组字段 having 过滤条件] [order by 排序字段] limit 起始索引,查询记录数;

说明:

1.起始索引从0开始 。

2.分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT 。

3.如果起始索引为0,起始索引可以省略,直接简写为 limit 10 。

小结:

1.DQL语句中的分页查询

•语法:limit 起始索引,每页展示记录数

•注意:项目开发中,前端传递过来的是页码,需要转换为起始索引

•公式:(页码-1)* 每页展示记录数

DQL综合案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
-- 准备测试数据
INSERT INTO emp(id, username, password, name, gender, phone, job, salary, image, entry_date, create_time, update_time)
VALUES (1,'shinaian','123456','施耐庵',1,'13309090001',4,15000,'1.jpg','2000-01-01','2024-04-11 16:35:33','2024-04-11 16:35:35'),
(2,'songjiang','123456','宋江',1,'13309090002',2,8600,'2.jpg','2015-01-01','2024-04-11 16:35:33','2024-04-11 16:35:37'),
(3,'lujunyi','123456','卢俊义',1,'13309090003',2,8900,'3.jpg','2008-05-01','2024-04-11 16:35:33','2024-04-11 16:35:39'),
(4,'wuyong','123456','吴用',1,'13309090004',2,9200,'4.jpg','2007-01-01','2024-04-11 16:35:33','2024-04-11 16:35:41'),
(5,'gongsunsheng','123456','公孙胜',1,'13309090005',2,9500,'5.jpg','2012-12-05','2024-04-11 16:35:33','2024-04-11 16:35:43'),
(6,'huosanniang','123456','扈三娘',2,'13309090006',3,6500,'6.jpg','2013-09-05','2024-04-11 16:35:33','2024-04-11 16:35:45'),
(7,'chaijin','123456','柴进',1,'13309090007',1,4700,'7.jpg','2005-08-01','2024-04-11 16:35:33','2024-04-11 16:35:47'),
(8,'likui','123456','李逵',1,'13309090008',1,4800,'8.jpg','2014-11-09','2024-04-11 16:35:33','2024-04-11 16:35:49'),
(9,'wusong','123456','武松',1,'13309090009',1,4900,'9.jpg','2011-03-11','2024-04-11 16:35:33','2024-04-11 16:35:51'),
(10,'lichong','123456','林冲',1,'13309090010',1,5000,'10.jpg','2013-09-05','2024-04-11 16:35:33','2024-04-11 16:35:53'),
(11,'huyanzhuo','123456','呼延灼',1,'13309090011',2,9700,'11.jpg','2007-02-01','2024-04-11 16:35:33','2024-04-11 16:35:55'),
(12,'xiaoliguang','123456','小李广',1,'13309090012',2,10000,'12.jpg','2008-08-18','2024-04-11 16:35:33','2024-04-11 16:35:57'),
(13,'yangzhi','123456','杨志',1,'13309090013',1,5300,'13.jpg','2012-11-01','2024-04-11 16:35:33','2024-04-11 16:35:59'),
(14,'shijin','123456','史进',1,'13309090014',2,10600,'14.jpg','2002-08-01','2024-04-11 16:35:33','2024-04-11 16:36:01'),
(15,'sunerniang','123456','孙二娘',2,'13309090015',2,10900,'15.jpg','2011-05-01','2024-04-11 16:35:33','2024-04-11 16:36:03'),
(16,'luzhishen','123456','鲁智深',1,'13309090016',2,9600,'16.jpg','2010-01-01','2024-04-11 16:35:33','2024-04-11 16:36:05'),
(17,'liying','12345678','李应',1,'13309090017',1,5800,'17.jpg','2015-03-21','2024-04-11 16:35:33','2024-04-11 16:36:07'),
(18,'shiqian','123456','时迁',1,'13309090018',2,10200,'18.jpg','2015-01-01','2024-04-11 16:35:33','2024-04-11 16:36:09'),
(19,'gudasao','123456','顾大嫂',2,'13309090019',2,10500,'19.jpg','2008-01-01','2024-04-11 16:35:33','2024-04-11 16:36:11'),
(20,'ruanxiaoer','123456','阮小二',1,'13309090020',2,10800,'20.jpg','2018-01-01','2024-04-11 16:35:33','2024-04-11 16:36:13'),
(21,'ruanxiaowu','123456','阮小五',1,'13309090021',5,5200,'21.jpg','2015-01-01','2024-04-11 16:35:33','2024-04-11 16:36:15'),
(22,'ruanxiaoqi','123456','阮小七',1,'13309090022',5,5500,'22.jpg','2016-01-01','2024-04-11 16:35:33','2024-04-11 16:36:17'),
(23,'ruanji','123456','阮籍',1,'13309090023',5,5800,'23.jpg','2012-01-01','2024-04-11 16:35:33','2024-04-11 16:36:19'),
(24,'tongwei','123456','童威',1,'13309090024',5,5000,'24.jpg','2006-01-01','2024-04-11 16:35:33','2024-04-11 16:36:21'),
(25,'tongmeng','123456','童猛',1,'13309090025',5,4800,'25.jpg','2002-01-01','2024-04-11 16:35:33','2024-04-11 16:36:23'),
(26,'yanshun','123456','燕顺',1,'13309090026',5,5400,'26.jpg','2011-01-01','2024-04-11 16:35:33','2024-04-11 16:36:25'),
(27,'lijun','123456','李俊',1,'13309090027',5,6600,'27.jpg','2004-01-01','2024-04-11 16:35:33','2024-04-11 16:36:27'),
(28,'lizhong','123456','李忠',1,'13309090028',5,5000,'28.jpg','2007-01-01','2024-04-11 16:35:33','2024-04-11 16:36:29'),
(29,'songqing','123456','宋清',1,'13309090029',5,5100,'29.jpg','2020-01-01','2024-04-11 16:35:33','2024-04-11 16:36:31'),
(30,'liyun','123456','李云',1,'13309090030',NULL,NULL,'30.jpg','2020-03-01','2024-04-11 16:35:33','2024-04-11 16:36:31');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
--  =================== DQL: 基本查询 ======================
-- 1. 查询指定字段 name,entry_date 并返回
select emp.name,emp.entry_date from emp;

-- 2. 查询返回所有字段

-- 方式一(推荐)
select id, username, password, name, gender, phone, job, salary, image, entry_date, create_time, update_time from emp;
-- 方式二(不推荐)
select * from emp;

-- 3. 查询所有员工的 name,entry_date, 并起别名(姓名、入职日期)
select emp.name as '姓名', emp.entry_date as '入职日期' from emp;

select emp.name '姓名', emp.entry_date '入职日期' from emp;
-- 4. 查询已有的员工关联了哪几种职位(不要重复)
select distinct emp.job from emp;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
--  =================== DQL: 条件查询 ======================
-- 1. 查询 姓名 为 柴进 的员工
select * from emp where name = '柴进';

-- 2. 查询 薪资小于等于5000 的员工信息
select * from emp where salary <= 5000;

-- 3. 查询 没有分配职位 的员工信息
select * from emp where job is null ;

-- 4. 查询 有职位 的员工信息
select * from emp where job is not null;

-- 5. 查询 密码不等于 '123456' 的员工信息
select * from emp where password != '123456';

select * from emp where password <> '123456';

-- 6. 查询 入职日期 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间的员工信息
select * from emp where entry_date between '2000-01-01' and '2010-01-01';

-- 7. 查询 入职时间 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间 且 性别为女 的员工信息
select * from emp where entry_date between '2000-01-01' and '2010-01-01' and gender = 2;

-- 8. 查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
select * from emp where job = 2 or job=3 or job=4;

select * from emp where job in(2,3,4);
-- 9. 查询 姓名 为两个字的员工信息
select * from emp where name like '__';

-- 10. 查询 姓 '李' 的员工信息
select * from emp where name like '李%';

-- 11. 查询 姓名中包含 '二' 的员工信息
select * from emp where name like '%二%';

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--  =================== DQL: 分组查询 ======================
-- 聚合函数
-- 注意:所有的聚合函数不参与null值的计算

-- 1. 统计该企业员工数量
-- count(字段)
select count(name) from emp;
-- count(*) 推荐
select count(*) from emp;
-- count(常量) 推荐
select count(1) from emp;
-- 2. 统计该企业员工的平均薪资
select avg(emp.salary) from emp;

-- 3. 统计该企业员工的最低薪资
select min(emp.salary) from emp;

-- 4. 统计该企业员工的最高薪资
select max(emp.salary) from emp;

-- 5. 统计该企业每月要给员工发放的薪资总额(薪资之和)
select sum(emp.salary) from emp;
1
2
3
4
5
6
7
8
9
-- 分组
-- 注意:分组之后,select后的字段列表不能随意书写,能写的一般是 分组字段+聚合函数

-- 1. 根据性别分组 , 统计男性和女性员工的数量
select emp.gender,count(*) from emp group by gender;

-- 2. 先查询入职时间在 '2015-01-01' (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位
select emp.job,count(*) from emp where entry_date <= '2015-01-01' group by job having count(*) >= 2;

1
2
3
4
5
6
7
8
9
--  =================== 排序查询 ======================
-- 1. 根据入职时间, 对员工进行升序排序
select * from emp order by entry_date asc ;

-- 2. 根据入职时间, 对员工进行降序排序
select * from emp order by entry_date desc ;

-- 3. 根据 入职时间 对公司的员工进行 升序排序 , 入职时间相同 , 再按照 更新时间 进行降序排序
select * from emp order by entry_date asc , update_time desc ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--  =================== 分页查询 ======================
-- 1. 从起始索引0开始查询员工数据, 每页展示5条记录
select * from emp limit 0,5;

-- 2. 查询 第1页 员工数据, 每页展示5条记录
select * from emp limit 0,5;

-- 3. 查询 第2页 员工数据, 每页展示5条记录
select * from emp limit 5,5;

-- 4. 查询 第3页 员工数据, 每页展示5条记录
select * from emp limit 10,5;

-- 页码
-- 起始索引 = (页码-1)*每页展示的记录数

莫道桑榆晚,红霞霜满天!