案例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 ~]#