当前位置: 首页 > news >正文

MySQL进阶学习与初阶复习第三天

目录

一.从.sql文件执行SQL语句

1.使⽤source命令导⼊

2.使⽤mysql客⼾端导⼊

二.mysqlcheck表维护程序

三.Mysqldump - 数据库备份程序


一.从.sql文件执行SQL语句

1.使⽤source命令导⼊

        有时候我们需要从.sql ⽂件执⾏⼀些SQL语句,⽐如要把⼀个数据库从⼀台服务器A复制到另⼀台服务器B上,那么可以先从服务器A导出数据到.sql⽂件,然后在服务器B执⾏这个.sql⽂件,在上⼀⼩节,⽤help命令查看命令列表,可以看到有⼀个source 命令如下所⽰:

mysql> help
# 省略...
source (\.) Execute an SQL script file. Takes a file name as an argument.
# 省略...

下⾯我们演⽰⼀下source命令的使⽤⽅法

1. 准备要执⾏的.sql⽂件,名为test_db.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, '张三', 'zs@bit.com');
INSERT INTO `student` VALUES (2, 50002, '李四', 'ls@bit.com');
INSERT INTO `student` VALUES (3, 50003, '王五', 'ww@bit.com');
INSERT INTO `student` VALUES (4, 50004, '赵六', 'zl@bit.com');
INSERT INTO `student` VALUES (5, 50005, '钱七', 'qq@bit.com');
SET FOREIGN_KEY_CHECKS = 1;

2. 确定.sql⽂件的绝对路径

3. 连接数据库查看已有数据库

4. 使⽤source命令执⾏.sql⽂件的SQL语句

mysql> source /home/guangchen/database/test_db.sql
# 也可以使⽤缩写形式
mysql> \. /home/guangchen/database/test_db.sql
# 中间省略...
Query OK, 0 rows affected (0.00 sec)

5. 查看数据库并查询数据,验证导⼊是否成功

 

2.使⽤mysql客⼾端导⼊

直接使⽤mysql客⼾端程序导⼊.sql⽂件并执⾏相应的SQL语句,可以使⽤以下命令

mysql db_name < text_file # 在指定的数据库下执⾏SQL,前提是数据库必须提前建⽴好
mysql < text_file # 不指定数据库.sql中必须有USE [database_name],来指定要操作的数据库
guangchen@guangchen-vm:~/database$ mysql <
/home/guangchen/database/test_db.sql -uroot -p
Enter password:

登录数据库并验证是否导⼊成功

可以根据实际需要选择导⼊.sql的⽅式

示例:

二.mysqlcheck表维护程序

        在命令⾏中使⽤MySQL发⾏版中的其他⼯具时,⼀些选项是公共的,⽐如⽤⼾名和密码,使⽤⽅法和mysql相同,在这⾥统⼀列出,后⾯我们在介绍不同的⼯具时,只讨论个性的选项及作⽤,公共选项如下所⽰:

选项--⻓格式
短格式
说明
--host-h

--host=host_name, -h host_name

连接到指定主机上的MySQL服务

--port-P
--port=port_num , -P port_num
TCP/IP 连接使⽤的端⼝号
--user-u
--user=user_name , -u user_name
⽤于连接到MySQL 服务器的⽤⼾名
--password
-p
--password[=password] , -p[password]
⽤于连接到MySQL 服务器的密码。可选,如果没有给出, 会提⽰⽤⼾输⼊
--defaults-file
--defaults-file=file_name
使⽤指定的选项⽂件。如果该⽂件不存在,则会发⽣错误。
--compress
-C
--compress , -C
如果可能,压缩客⼾端和服务器之间传输的所有信息
--protocol
--protocol={TCP|SOCKET|PIPE|MEMORY}
⽤于连接到服务器的传输协议, 默认为TCP
--version
-V
--version , -V
显⽰版本信息并退出。
--help
-?
--help , -?
显⽰帮助信息并退出。

示例: 

作⽤

mysqlcheck客⼾端⽤于执⾏表维护,可以对表进⾏:分析、检查、优化或修复操作。

  • 分析的作⽤是查看表的关键字分布,能够让 sql ⽣成正确的执⾏计划(⽀持 InnoDB,MyISAM,NDB)
  • 检查的作⽤是检查表的完整性以及数据库表和索引是否损坏(⽀持 InnoDB,MyISAM,ARCHIVE,CSV)
  • 优化的作⽤是回收空间、减少碎⽚、提⾼I/O(⽀持 InnoDB,MyISAM,ARCHIVE)
  • 修复的作⽤是修复可能已经损坏的表(⽀持 MyISAM,ARCHIVE,CSV)

注意事项

  1. 当使⽤mysqlcheck⼯具时,MySQL服务器必须在运⾏状态
  2. 执⾏过程中相应的表将会被锁定,所以其他的操作将会被挂起
  3. 并不是所有的存储引擎都⽀持以上四种操作,如果遇到不⽀持的引擎会报出相应的错误
  4. 执⾏表修复操作之前对表进⾏备份,在某些情况下可能会导致数据丢失。

使⽤⽅法

⼀般通过以下三种⽅法使⽤mysqlcheck

mysqlcheck [options] db_name [tbl_name ...]
mysqlcheck [options] --databases db_name ...
mysqlcheck [options] --all-databases

        如果在 db_name 后没有指定任何表名,或者使⽤ --databases --all-databases 选项,那么整个数据库都会被检查。

常⽤选项

        mysqlcheck有如下常⽤选项,可以在命令⾏中指定,也可以在选项⽂件中通过 [mysqlcheck]和 [client] 组进⾏指定。

选项
说明
--analyze,-a
分析表
--auto-repair
如果检查的表有损坏,则⾃动修复它。所有表都检查过之后才进⾏必要的修复
--check,-c
检查表中的错误。mysqlcheck的默认操作
--check-only-changed,-C
仅检查⾃上次检查以来更改过的表
--databases,-B
--databases db_name 多个数据库名⽤空格隔开处理指定数据库中的所有表
--force, -f
即使发⽣SQL错误也要继续
--optimize,-o
优化表
--repair,-r
执⾏可能进⾏的任务修复操作,除了唯⼀键
--skip-database
--skip-database=db_name不需要执⾏检查的数据库名(区分⼤⼩写)
--tables
--tables=table_name 多个表名⽤空格隔开在选项之后的所有名称参数都被视为表名。
--use-frm
对于MyISAM表的修复操作

mysqlcheck的特殊使⽤

        mysqlcheck程序的默认功能是对数据表进⾏ 检查 操作(相当于指定选项 --check ),如果想要对表进⾏修复操作,可以通过复制原来的mysqlcheck程序,并重命名为mysqlrepair,并运⾏mysqlrepair即可,还可以创建mysqlcheck的快捷⽅式,并把快捷⽅式命名为mysqlrepair然后直接运⾏,这时就执⾏的是修复操作,通过下表所⽰的命名⽅式可以改变mysqlcheck的默认⾏为:

程序名
说明
mysqlrepair
默认⾏为是修复,相当于选项 --repair
mysqlanalyze
默认⾏为是修复,相当于分析 --analyze
mysqloptimize
默认⾏为是修复,相当于优化 --optimize

三.Mysqldump - 数据库备份程序

作⽤

mysqldump客⼾端程序可以执⾏逻辑备份并⽣成⼀组SQL语句,其中包含原始数据库和表的定义以及表中的数据,以便实现对数据库的简单备份或复制。mysqldump命令可以⽣成CSV、或XML格式的⽂件。

注意事项

  1. 转储表时必须要有 SELECT 权限
  2. 转储视图时必须要有 SHOW VIEW 权限
  3. 转储触发器时必须要有 TRIGGER 权限
  4. 如果没有使⽤ --single-transaction 选项时必须要有 LOCK TABLES 权限
  5. 如果没有使⽤ --no-tablespaces 选项时必须要有 PROCESS 权限
  6. 重新导⼊转储⽂件时,也需要有相应的权限
  7. 由于mysqldump是逐⾏转储数据,所以不适⽤于⼤数据量的转储与导⼊

使⽤⽅法

mysqldump的⽅法通常有以下使⽤,可以转储⼀个或多个表或数据库,如下所⽰:

mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases

        如果在 db_name 后没有指定任何表名,或者使⽤ --databases --all-databases 选项,那么整个数据库都会被转储.

示例:

常⽤选项

        mysqldump有如下常⽤选项,可以在命令⾏中指定,也可以在选项⽂件中通过 [mysqldump] 和[client] 组进⾏指定.

选项
说明
--add-drop-database
在每个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句
--add-drop-table
在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句
--add-drop-trigger
在每个 CREATE TRIGGER 语句之前添加 DROP TRIGGER 语句
--add-locks
LOCK TABLES UNLOCK TABLES 语句包裹每个表转储
--all-databases,-A
转储所有数据库中的所有表
--databases,-B
--databases=db_name 多个数据库名⽤空格隔开将参数解释为数据库名称并转储所有的表
--comments,-i
添加注释到转储⽂件
--compact
紧凑格式输出
--compatible=ansi
⽣成与其他数据库或旧MySQL服务器更兼容的输出
--complete-insert,-c
使⽤包含列名的完整INSERT语句
--events,-E
从转储数据库中转储事件
--extended-insert,-e
使⽤多⾏INSERT语法
--flush-privileges
在开始转储前刷新⽇志
--force,-f
转储期间发⽣了SQL错误,也要继续
--hex-blob
使⽤⼗六进制表⽰法转储⼆进制列
--ignore-table
--ignore-table=db_name.table_name 多个表⽤空格隔开不转储给定的表
--lock-all-tables,-x
锁定所有数据库中的所有表
--lock-tables,-l
在转储之前锁定指定要转储的表
--no-autocommit
将每个转储表的 INSERT 语句包含在 SET autocommit = 0 COMMIT 语句中
--no-create-db,-n
不要⽣成 CREATE DATABASE 语句
--no-create-info,-t
不要为每个转储的表⽣成 CREATE TABLE 语句
--no-data,-d
不转储表内容
--skip-add-drop-table
在每个 CREATE TABLE 语句之前不添加 DROP TABLE 语句
--skip-add-locks
不要添加锁
--skip-comments
转储⽂件中不添加注释
--skip-compact
不使⽤紧凑格式
--skip-triggers
不转储触发器
--tables
--tables=table_name 多个表名⽤空格隔开在选项之后的所有名称参数都被视为表名。
--triggers
转储每个表中的触发器
--xml,-X
以XML格式输出

http://www.lryc.cn/news/600866.html

相关文章:

  • Windows11下和Vmware中的Ubuntu22.04设置samba服务遇到的一个问题- valid users和guest设置冲突
  • 单元测试、系统测试、集成测试知识详解
  • 深入解析命名管道:原理、实现与进程间通信应用
  • 大型微服务项目:听书——12 数据一致性自定义starter封装缓存操作
  • 2025年全国青少年信息素养大赛Scratch算法创意实践挑战赛 小低组 初赛 真题
  • Fast_Lio 修改激光雷达话题
  • C++核心编程学习--对象特性--对象模型和this指针
  • 在C#中判断两个列表数据是否相同
  • 服务器:数字世界的隐形引擎
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(四)
  • 「iOS」————继承链与对象的结构
  • 数据结构 二叉树(3)---层序遍历二叉树
  • 系统性提升大模型回复准确率:从 RAG 到多层 Chunk 策略
  • 机器学习特征工程:特征选择及在医学影像领域的应用
  • 【AI】联网模式
  • odoo代码分析(二)
  • idea中无法删除模块,只能remove?
  • 建筑施工场景下漏检率↓76%!陌讯多模态融合算法在工程安全监控的落地实践
  • 三防平板搭载2D扫描头:工业数据采集的革新利器
  • python—————knn算法
  • 【图像分割】记录1:unet, yolov8_seg
  • 嵌入式分享#27:原来GT911有两个I2C地址(全志T527)
  • 深度学习损失函数的设计哲学:从交叉熵到Huber损失的深入探索
  • Spring AI Alibaba Video 示例
  • 阿里开源Qwen3-Coder,编程大模型进入高效时代
  • Go语言unsafe包深度解析
  • 机器学习入门:线性回归详解与实战
  • 高效无损压缩方案:轻松批量处理图片,节省存储空间
  • Python编程:初入Python魔法世界
  • 基于cooragent的旅游多智能体的MCP组件安装与其开发