案例1:INSERT插入表记录
案例2:UPDATE和DELETE
案例3:SELECT查询表记录
案例4:WHERE简单匹配
案例5:WHERE高级匹配
案例6:整理查询结果
案例7:备份数据库资料
案例8:恢复数据库

1 案例1:INSERT插入表记录
1.1 问题

本例要求以前一章的studb库stuinfo表为基础,学会表格记录的多种不同插入方法,完成下列任务:

1)进入studb库,向 stuinfo表批量插入如图-1所示数据
表记录增删改查
2)确认表格stuinfo的数据内容
1.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:进入studb库,向stuinfo表批量插入以下数据

记录内容如下:

NTD2020110007 周伯通 男 17012341234 昆嵛山全真教总部

NTD2020110008 王重阳 男 17012340001 昆嵛山全真教总部

NTD2020110009 段王爷 男 17566666666 云南大理桃源山

INSERT插入记录操作:

MariaDB [studb]> INSERT  INTO  stuinfo  VALUES 
    -> ('NTD2020110007', '周伯通', '男', '17012341234', '昆嵛山全真教总部'), 
    -> ('NTD2020110008', '王重阳', '男', '17012340001', '昆嵛山全真教总部'), 
    -> ('NTD2020110009', '段王爷', '男', '17566666666', '云南大理桃源山');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0
MariaDB [studb]>

步骤二:确认表格 stuinfo 的数据内容

查看表格内容,确认新增加的3条记录。

MariaDB [studb]> SELECT  *  FROM  stuinfo;
+---------------+-----------+--------+--------------+--------------------------+
| 学号          | 姓名      | 性别   | 联系电话     | 通信地址                 |
+---------------+-----------+--------+--------------+--------------------------+
| NTD2020110001 | 郭靖      | 男     | 13145201314  | 东海桃花岛               |
| NTD2020110002 | 黄蓉      | 女     | 13145201413  | 东海桃花岛               |
| NTD2020110003 | 华筝      | 女     | 13705666777  | 蒙古大营                 |
| NTD2020110004 | 洪七公    | 男     | 13888888888  | 太湖北丐帮总舵           |
| NTD2020110005 | 欧阳锋    | 男     | 18777777777  | 西域白驼山庄             |
| NTD2020110006 | 黄药师    | 男     | 18999999999  | 东海桃花岛               |
| NTD2020110007 | 周伯通    | 男     | 17012341234  | 昆嵛山全真教总部         |
| NTD2020110008 | 王重阳    | 男     | 17012340001  | 昆嵛山全真教总部         |
| NTD2020110009 | 段王爷    | 男     | 17566666666  | 云南大理桃源山           |
+---------------+-----------+--------+--------------+--------------------------+
9 rows in set (0.00 sec)
MariaDB [studb]> 

2 案例2:UPDATE和DELETE
2.1 问题

本例要求学会UPDATE和DELETE的语句的操作方法,完成下列任务:

1)更新 stuinfo 表中的数据记录

将 姓名='黄药师' 的人的联系电话修改为 '13566778899'
将 姓名='洪七公' 的人的姓名修改为 '洪七'

2)删除 stuinfo 表中 姓名='洪七公' 的数据记录

3)确认表格 stuinfo 的数据内容
2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:更新stuinfo表中的数据记录

1)将 姓名='黄药师' 的人的联系电话修改为 '13566778899'

MariaDB [studb]> UPDATE  stuinfo  SET  联系电话='13566778899'  WHERE  姓名='黄药师';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
MariaDB [studb]>

2)将 姓名='洪七公' 的人的姓名修改为 '洪七'

MariaDB [studb]> UPDATE  stuinfo  SET  姓名='洪七'  WHERE  姓名='洪七公';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
MariaDB [studb]>

步骤二:删除stuinfo表中 姓名='洪七公' 的数据记录

此时表格中已经没有姓名为“洪七公”的记录(只有“洪七”),所有不会有记录被删除。

MariaDB [studb]> DELETE  FROM  stuinfo  WHERE  姓名='洪七公';
Query OK, 0 rows affected (0.00 sec)
MariaDB [studb]>

步骤三:确认表格stuinfo的数据内容

检查修改后的表格内容:

MariaDB [studb]> SELECT  *  FROM  stuinfo;
+---------------+-----------+--------+--------------+--------------------------+
| 学号          | 姓名      | 性别   | 联系电话     | 通信地址                 |
+---------------+-----------+--------+--------------+--------------------------+
| NTD2020110001 | 郭靖      | 男     | 13145201314  | 东海桃花岛               |
| NTD2020110002 | 黄蓉      | 女     | 13145201413  | 东海桃花岛               |
| NTD2020110003 | 华筝      | 女     | 13705666777  | 蒙古大营                 |
| NTD2020110004 | 洪七      | 男     | 13888888888  | 太湖北丐帮总舵           |
| NTD2020110005 | 欧阳锋    | 男     | 18777777777  | 西域白驼山庄             |
| NTD2020110006 | 黄药师    | 男     | 13566778899  | 东海桃花岛               |
| NTD2020110007 | 周伯通    | 男     | 17012341234  | 昆嵛山全真教总部         |
| NTD2020110008 | 王重阳    | 男     | 17012340001  | 昆嵛山全真教总部         |
| NTD2020110009 | 段王爷    | 男     | 17566666666  | 云南大理桃源山           |
+---------------+-----------+--------+--------------+--------------------------+
9 rows in set (0.00 sec)
MariaDB [studb]> 

3 案例3:SELECT查询表记录
3.1 问题

本例要求学会SELECT语句的操作方法,查询stuinfo表,完成下列任务:

1)列出表中每一条记录的 姓名、联系电话

2)列出表中 性别='女' 的详细数据记录

3)列出表中 性别='女' 的记录的 姓名、联系电话

4)列出stuinfo表中 通信地址='东海桃花岛' 的详细数据记录
3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:列出表中每一条记录的 姓名、联系电话

MariaDB [studb]> SELECT  姓名,联系电话  FROM  stuinfo;
+-----------+--------------+
| 姓名      | 联系电话     |
+-----------+--------------+
| 郭靖      | 13145201314  |
| 黄蓉      | 13145201413  |
| 华筝      | 13705666777  |
| 洪七      | 13888888888  |
| 欧阳锋    | 18777777777  |
| 黄药师    | 13566778899  |
| 周伯通    | 17012341234  |
| 王重阳    | 17012340001  |
| 段王爷    | 17566666666  |
+-----------+--------------+
9 rows in set (0.00 sec)
MariaDB [studb]> 

步骤二:列出表中 性别='女' 的详细数据记录

MariaDB [studb]> SELECT  *  FROM  stuinfo  WHERE  性别='女';
+---------------+--------+--------+--------------+-----------------+
| 学号          | 姓名   | 性别   | 联系电话     | 通信地址        |
+---------------+--------+--------+--------------+-----------------+
| NTD2020110002 | 黄蓉   | 女     | 13145201413  | 东海桃花岛      |
| NTD2020110003 | 华筝   | 女     | 13705666777  | 蒙古大营        |
+---------------+--------+--------+--------------+-----------------+
2 rows in set (0.00 sec)
MariaDB [studb]> 

步骤三:列出表中 性别='女' 的记录的 姓名、联系电话

MariaDB [studb]> SELECT  姓名,联系电话  FROM  stuinfo  WHERE  性别='女';
+--------+--------------+
| 姓名   | 联系电话     |
+--------+--------------+
| 黄蓉   | 13145201413  |
| 华筝   | 13705666777  |
+--------+--------------+
2 rows in set (0.00 sec)
MariaDB [studb]>

步骤四:列出stuinfo表中 通信地址='东海桃花岛' 的详细数据记录

MariaDB [studb]> SELECT  *  FROM  stuinfo  WHERE  通信地址='东海桃花岛';
+---------------+-----------+--------+--------------+-----------------+
| 学号          | 姓名      | 性别   | 联系电话     | 通信地址        |
+---------------+-----------+--------+--------------+-----------------+
| NTD2020110001 | 郭靖      | 男     | 13145201314  | 东海桃花岛      |
| NTD2020110002 | 黄蓉      | 女     | 13145201413  | 东海桃花岛      |
| NTD2020110006 | 黄药师    | 男     | 13566778899  | 东海桃花岛      |
+---------------+-----------+--------+--------------+-----------------+
3 rows in set (0.01 sec)
MariaDB [studb]> 

4 案例4:WHERE简单匹配
4.1 问题

本例要求学会WHERE条件匹配的简单应用,针对stuinfo表中的数据执行查询,完成下列任务:

1)列出表中 通信地址!='东海桃花岛' 的数据记录

2)列出表中 通信地址='东海桃花岛' 而且 性别='女' 的数据记录

3)列出表中 通信地址='蒙古大营' 或者 性别='女' 的数据记录
4.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:列出表中 通信地址!='东海桃花岛' 的数据记录

MariaDB [studb]> SELECT  *  FROM  stuinfo  WHERE  通信地址!='东海桃花岛';
+---------------+-----------+--------+--------------+--------------------------+
| 学号          | 姓名      | 性别   | 联系电话     | 通信地址                 |
+---------------+-----------+--------+--------------+--------------------------+
| NTD2020110003 | 华筝      | 女     | 13705666777  | 蒙古大营                 |
| NTD2020110004 | 洪七      | 男     | 13888888888  | 太湖北丐帮总舵           |
| NTD2020110005 | 欧阳锋    | 男     | 18777777777  | 西域白驼山庄             |
| NTD2020110007 | 周伯通    | 男     | 17012341234  | 昆嵛山全真教总部         |
| NTD2020110008 | 王重阳    | 男     | 17012340001  | 昆嵛山全真教总部         |
| NTD2020110009 | 段王爷    | 男     | 17566666666  | 云南大理桃源山           |
+---------------+-----------+--------+--------------+--------------------------+
6 rows in set (0.00 sec)
MariaDB [studb]> 

步骤二:列出表中 通信地址='东海桃花岛' 而且 性别='女' 的数据记录

MariaDB [studb]> SELECT  *  FROM  stuinfo  WHERE  通信地址='东海桃花岛'  AND  性别='女';
+---------------+--------+--------+--------------+-----------------+
| 学号          | 姓名   | 性别   | 联系电话     | 通信地址        |
+---------------+--------+--------+--------------+-----------------+
| NTD2020110002 | 黄蓉   | 女     | 13145201413  | 东海桃花岛      |
+---------------+--------+--------+--------------+-----------------+
1 row in set (0.00 sec)
MariaDB [studb]> 

步骤三:列出表中 通信地址='蒙古大营' 或者 性别='女' 的数据记录

MariaDB [studb]> SELECT  *  FROM  stuinfo  WHERE  通信地址='蒙古大营'  OR  性别='女';
+---------------+--------+--------+--------------+-----------------+
| 学号          | 姓名   | 性别   | 联系电话     | 通信地址        |
+---------------+--------+--------+--------------+-----------------+
| NTD2020110002 | 黄蓉   | 女     | 13145201413  | 东海桃花岛      |
| NTD2020110003 | 华筝   | 女     | 13705666777  | 蒙古大营        |
+---------------+--------+--------+--------------+-----------------+
2 rows in set (0.00 sec)
MariaDB [studb]>

注意:WHERE条件子句适用于SELECT、UPDATE、DELETE操作
5 案例5:WHERE高级匹配
5.1 问题

本例要求学会WHERE条件匹配的高级应用,针对stuinfo表中的数据执行查询,完成下列任务:

1)列出表中 姓名 为 郭靖、黄蓉、欧阳锋、黄药师 的数据记录

2)列出表中 通信地址 包括 '全真教' 字串的数据记录

3)列出表中 姓名 只有 两个字 的数据记录
5.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:列出表中 姓名 为 郭靖、黄蓉、欧阳锋、黄药师 的数据记录

MariaDB [studb]> SELECT  *  FROM  stuinfo  WHERE  姓名  IN ('郭靖', '黄蓉', '欧阳锋', '黄药师');
+---------------+-----------+--------+--------------+--------------------+
| 学号          | 姓名      | 性别   | 联系电话     | 通信地址           |
+---------------+-----------+--------+--------------+--------------------+
| NTD2020110001 | 郭靖      | 男     | 13145201314  | 东海桃花岛         |
| NTD2020110002 | 黄蓉      | 女     | 13145201413  | 东海桃花岛         |
| NTD2020110005 | 欧阳锋    | 男     | 18777777777  | 西域白驼山庄       |
| NTD2020110006 | 黄药师    | 男     | 13566778899  | 东海桃花岛         |
+---------------+-----------+--------+--------------+--------------------+
4 rows in set (0.00 sec)
MariaDB [studb]>

步骤二:列出表中 通信地址 包括 '全真教' 字串的数据记录

MariaDB [studb]> SELECT  *  FROM  stuinfo  WHERE  通信地址  LIKE '%全真教%';
+---------------+-----------+--------+--------------+--------------------------+
| 学号          | 姓名      | 性别   | 联系电话     | 通信地址                 |
+---------------+-----------+--------+--------------+--------------------------+
| NTD2020110007 | 周伯通    | 男     | 17012341234  | 昆嵛山全真教总部         |
| NTD2020110008 | 王重阳    | 男     | 17012340001  | 昆嵛山全真教总部         |
+---------------+-----------+--------+--------------+--------------------------+
2 rows in set (0.00 sec)
MariaDB [studb]> 

步骤三:列出表中 姓名 只有 两个字 的数据记录
MariaDB [studb]> SELECT * FROM stuinfo WHERE 姓名 LIKE '__';
+---------------+--------+--------+--------------+-----------------------+
| 学号 | 姓名 | 性别 | 联系电话 | 通信地址 |
+---------------+--------+--------+--------------+-----------------------+
| NTD2020110001 | 郭靖 | 男 | 13145201314 | 东海桃花岛 |
| NTD2020110002 | 黄蓉 | 女 | 13145201413 | 东海桃花岛 |
| NTD2020110003 | 华筝 | 女 | 13705666777 | 蒙古大营 |
| NTD2020110004 | 洪七 | 男 | 13888888888 | 太湖北丐帮总舵 |
+---------------+--------+--------+--------------+-----------------------+
4 rows in set (0.00 sec)
MariaDB [studb]>

6 案例6:整理查询结果
6.1 问题

本例要求学会查询结果的排序和数量限制,针对stuinfo表中的数据执行查询,完成下列任务:

1)查询表中 性别='男' 的侠客人数

2)列出表中 通信地址='东海桃花岛' 的数据记录,按学号降序排列

3)列出表中 性别='男' 的第4~5条记录(LIMIT 3,2)

4)列出表中前3条数据记录
6.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:查询表中 性别='男' 的侠客人数

MariaDB [studb]> SELECT  count(*)  FROM  stuinfo  WHERE  性别='男';
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.00 sec)
MariaDB [studb]> 

步骤二:列出表中 通信地址='东海桃花岛' 的数据记录,按学号降序排列

MariaDB [studb]> SELECT  *  FROM  stuinfo  WHERE  通信地址='东海桃花岛'  ORDER  BY  学号  DESC;
+---------------+-----------+--------+--------------+-----------------+
| 学号          | 姓名      | 性别   | 联系电话     | 通信地址        |
+---------------+-----------+--------+--------------+-----------------+
| NTD2020110006 | 黄药师    | 男     | 13566778899  | 东海桃花岛      |
| NTD2020110002 | 黄蓉      | 女     | 13145201413  | 东海桃花岛      |
| NTD2020110001 | 郭靖      | 男     | 13145201314  | 东海桃花岛      |
+---------------+-----------+--------+--------------+-----------------+
3 rows in set (0.00 sec)
MariaDB [studb]>

步骤三:列出表中 性别='男' 的第4~5条记录(LIMIT 3,2)

MariaDB [studb]> SELECT  *  FROM  stuinfo  WHERE  性别='男'  LIMIT  3,2;
+---------------+-----------+--------+--------------+--------------------------+
| 学号          | 姓名      | 性别   | 联系电话     | 通信地址                 |
+---------------+-----------+--------+--------------+--------------------------+
| NTD2020110006 | 黄药师    | 男     | 13566778899  | 东海桃花岛               |
| NTD2020110007 | 周伯通    | 男     | 17012341234  | 昆嵛山全真教总部         |
+---------------+-----------+--------+--------------+--------------------------+
2 rows in set (0.00 sec)
MariaDB [studb]>

步骤四:列出表中前3条数据记录

MariaDB [studb]> SELECT  *  FROM  stuinfo  LIMIT  3;
+---------------+--------+--------+--------------+-----------------+
| 学号          | 姓名   | 性别   | 联系电话     | 通信地址        |
+---------------+--------+--------+--------------+-----------------+
| NTD2020110001 | 郭靖   | 男     | 13145201314  | 东海桃花岛      |
| NTD2020110002 | 黄蓉   | 女     | 13145201413  | 东海桃花岛      |
| NTD2020110003 | 华筝   | 女     | 13705666777  | 蒙古大营        |
+---------------+--------+--------+--------------+-----------------+
3 rows in set (0.00 sec)
MariaDB [studb]>

7 案例7:备份数据库资料
7.1 问题

本例要求使用mysqldump工具对数据库进行备份,熟悉单库、多库的不同备份用法,完成下列任务:

1)备份studb库,保存为/root/studb.sql文件

2)备份studb库和mysql库,保存为/root/studb.sql文件

3)备份所有库,保存为/root/alldb.sql文件
7.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:备份studb库,保存为/root/studb.sql文件

[root@svr7 ~]# mysqldump   -uroot  -ppwd@123  studb  >  /root/studb.sql

步骤二:备份studb库和mysql库,保存为/root/studb.sql文件

[root@svr7 ~]# mysqldump  -uroot  -ppwd@123  --databases studb  mysql  >  /root/studb+mysql.sql

步骤三:备份所有库,保存为/root/alldb.sql文件

[root@svr7 ~]# mysqldump  -uroot  -ppwd@123  --all-databases  >  /root/alldb.sql

8 案例8:恢复数据库
8.1 问题

本例要求使用mysql工具恢复数据库资料,熟悉恢复单库、多库的不同方法,完成下列任务:

1)确保已经为 studb 库做好备份文件 /root/studb.sql

2)删除名为 studb 的库,检查结果

3)重建名为 studb 的空库

4)将备份文件 /root/studb.sql 导入名为 studb 的库

5)检查 studb 库中的表格数据
8.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:确保已经为 studb 库做好备份文件 /root/studb.sql

[root@svr7 ~]# ls  -lh  /root/studb.sql 
-rw-r--r--. 1 root root 11K 10月 24 20:20 /root/studb.sql

步骤二:删除名为 studb 的库,检查结果

1)登入数据库服务器

[root@svr7 ~]# mysql  -uroot  -ppwd@123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> 

2)删除studb库

MariaDB [(none)]> DROP  DATABASE  studb;
Query OK, 9 rows affected (0.00 sec)
MariaDB [(none)]>

步骤三:重建名为 studb 的空库

MariaDB [(none)]> CREATE  DATABASE  studb;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]>
MariaDB [(none)]> quit
Bye
[root@svr7 ~]#

步骤四:将备份文件 /root/studb.sql 导入名为 studb 的库

若目标库studb已丢失,则必须提前建好空库

[root@svr7 ~]# mysql  -uroot  -ppwd@123  studb  <  /root/studb.sql 
[root@svr7 ~]#

步骤五:检查 studb 库中的表格数据

[root@svr7 ~]# mysql  -uroot  -ppwd@123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 33
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SELECT  *  FROM  stuinfo;
ERROR 1046 (3D000): No database selected
MariaDB [(none)]> SELECT  *  FROM  studb.stuinfo;
+---------------+-----------+--------+--------------+--------------------------+
| 学号          | 姓名      | 性别   | 联系电话     | 通信地址                 |
+---------------+-----------+--------+--------------+--------------------------+
| NTD2020110001 | 郭靖      | 男     | 13145201314  | 东海桃花岛               |
| NTD2020110002 | 黄蓉      | 女     | 13145201413  | 东海桃花岛               |
| NTD2020110003 | 华筝      | 女     | 13705666777  | 蒙古大营                 |
| NTD2020110004 | 洪七      | 男     | 13888888888  | 太湖北丐帮总舵           |
| NTD2020110005 | 欧阳锋    | 男     | 18777777777  | 西域白驼山庄             |
| NTD2020110006 | 黄药师    | 男     | 13566778899  | 东海桃花岛               |
| NTD2020110007 | 周伯通    | 男     | 17012341234  | 昆嵛山全真教总部         |
| NTD2020110008 | 王重阳    | 男     | 17012340001  | 昆嵛山全真教总部         |
| NTD2020110009 | 段王爷    | 男     | 17566666666  | 云南大理桃源山           |
+---------------+-----------+--------+--------------+--------------------------+
9 rows in set (0.00 sec)
MariaDB [(none)]> quit
Bye
[root@svr7 ~]#