在上表所介绍的这些 MySQL 常用程序中,只有 mysqld 是服务端的程序,它属于后台程序,其他的那些都是我们在使用 MySQL 时客户端的工具。
二、mysqld -- MySQL 服务器
mysqld 也被称为 MySQL 服务器,这是一个多线程程序,对数据目录进行访问管理(包含数据库和表)。数据目录也是其他信息(如日志文件和状态文件)的默认存储位置。当 MySQL 服务器启动时,会侦听指定的端口、来处理来自客户端程序的网络连接,并管理不同客户端对数据库的访问。关于客户端与 mysqld 服务程序的关系如下图所示:
mysqld 程序有许多选项可以在启动时指定,运行以下命令可以查看完整的选项列表:
复制代码
mysqld --verbose --help
有关 MySQL 服务器的更多介绍,我会在后面文章中进行详细介绍。
三、mysql -- MySQL 客户端
1. mysql 客户端简介
mysql 是一个简单的 SQL shell,可以输入命令和执行 SQL 语句,当执行 SQL 语句时,查询结果以 ASCII 表格显示,关于 mysql 的基本使用非常简单,下面我们来回顾一下连接数据库的方式,打开终端并输入以下命令:
复制代码
# 连接 MySQL 服务器,长选项格式
mysql --user=user_name --password [db_name]
在当前的模式下,mysql 还有一组自己的命令,我们可以使用 help 或者 \h 查看命令列表,输入命令过程及结果如下图所示:
下面我就对上面列出的全部命令中的部分命令做一个详细介绍及演示。
(1)connect(\r)
这条指令所执行的操作是重新连接服务器,具体操作及效果如下图所示:
(2)status(\s)
这条指令所执行的操作是查看服务器的状态,具体操作及效果如下图所示:
(3)delimiter(\d)
这条指令所执行的操作是重新指定 SQL 语句的结束标识符,具体操作及效果如下图所示:
(4)exit 与 quit(\q)
这两条指令的短格式都是 \q,它们所执行的操作都是一样的:退出 mysql 客户端程序,具体操作及效果如下图所示:
(5)tee(\T) 与 notee(\t)
这两条指令是搭配使用的,指令 tee 所执行的操作是把所有执行结果保存到一个指定的文件中,指令 notee 所执行的操作是取消执行结果写入文件中,关于这两条指令的具体操作及效果如下图所示:
(6)prompt(\R)
这条指令所执行的操作是修改提示符,具体操作及效果如下图所示:
(7)source(\.)
这条指令所执行的操作是加载并执行指定的 .sql 脚本,具体操作及效果在下面再进行介绍。
(8)system(\!)
这条指令所执行的操作是执行系统命令,属于一个比较危险的操作,具体操作及效果如下图所示:
(9)help contents
使用这个命令可以查看关于 MySQL 数据库使用的具体帮助,包括用户管理、SQL 语法、数据类型、组件等相关内容列表,具体操作及效果如下图所示:
在 help 后面跟上具体要查看的条目,可以获取该条目的详细帮助信息,如:help Functions,操作及效果如下图所示:
继续输入 help 具体的条目,可以进一步观察关于此条目的详细说明,例如:help String Functions,具体操作及效果如下图所示:
还有很多其他的指令,感兴趣的友友们可以自己尝试一下咯~~
4.从 .sql 文件中执行 SQL语句
(1)使用 source 命令导入
有时我们需要从 .sql 文件中执行一些 SQL 语句,比如当我们要把一个数据库从一台服务器 A 复制到另一台服务器 B 上,那么就可以先从服务器 A 中导出数据到 .sql 文件,然后在服务器 B 执行这个 .sql 文件,在上面我们介绍的命令中有 source(\.)命令,那么下面我们就来具体操作及演示一下这个命令。
首先我们要先准备一个 .sql 文件,命名为 test_db.sql,内容如下:
sql复制代码
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP DATABASE IF EXISTS `test_db`;
CREATE DATABASE `test_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `test_db`;
-- ----------------------------
-- Table structure for classes
-- ----------------------------
DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`desc` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of classes
-- ----------------------------
INSERT INTO `classes` VALUES (1, '计算机系2019级1班', '学习了计算机原理、C和Java语言、数据结构和算法');
INSERT INTO `classes` VALUES (2, '中文系2019级3班', '学习了中国传统文学');
INSERT INTO `classes` VALUES (3, '自动化2019级5班', '学习了机械自动化');
-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, 'Java');
INSERT INTO `course` VALUES (2, '中国传统文化');
INSERT INTO `course` VALUES (3, '计算机原理');
INSERT INTO `course` VALUES (4, '语文');
INSERT INTO `course` VALUES (5, '高阶数学');
INSERT INTO `course` VALUES (6, '英文');
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`score` decimal(3, 1) NULL DEFAULT NULL,
`student_id` int(11) NULL DEFAULT NULL,
`course_id` int(11) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (70.5, 1, 1);
INSERT INTO `score` VALUES (98.5, 1, 3);
INSERT INTO `score` VALUES (33.0, 1, 5);
INSERT INTO `score` VALUES (98.0, 1, 6);
INSERT INTO `score` VALUES (60.0, 2, 1);
INSERT INTO `score` VALUES (59.5, 2, 5);
INSERT INTO `score` VALUES (33.0, 3, 1);
INSERT INTO `score` VALUES (68.0, 3, 3);
INSERT INTO `score` VALUES (99.0, 3, 5);
INSERT INTO `score` VALUES (67.0, 4, 1);
INSERT INTO `score` VALUES (23.0, 4, 3);
INSERT INTO `score` VALUES (56.0, 4, 5);
INSERT INTO `score` VALUES (72.0, 4, 6);
INSERT INTO `score` VALUES (81.0, 5, 1);
INSERT INTO `score` VALUES (37.0, 5, 5);
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) PRIMARY KEY AUTO_INCREMENT,
`sn` int(11) NOT NULL COMMENT '学号',
`name` varchar(20) NOT NULL COMMENT '姓名',
`mail` varchar(20) COMMENT 'QQ邮箱'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, 50001, '张三', '[email protected]');
INSERT INTO `student` VALUES (2, 50002, '李四', '[email protected]');
INSERT INTO `student` VALUES (3, 50003, '王五', '[email protected]');
INSERT INTO `student` VALUES (4, 50004, '赵六', '[email protected]');
INSERT INTO `student` VALUES (5, 50005, '钱七', '[email protected]');
SET FOREIGN_KEY_CHECKS = 1;