目錄
結束符 ; \g \G?
中斷輸入 ctrl + c
查看命令列表 help
? (\?)
connect (\r)
status (\s)
delimiter (\d)
?exit (\q) quit (\q)?
tee (\T)
?編輯?notee (\t)?
prompt (\R)
source (\.)
system (\!)
?編輯
use (\u)
help contents
結束符 ; \g \G?
當我們使用mysql客戶端程序連接到數據庫服務器之后,可以發送SQL語句到服務器執行,并以;(分號)、\g或\G作為結束符。
那么以;結尾和以\g、\G結尾有啥區別呢?
;和\g結尾都是一樣的,都是以表格的形式展示結果。
但是\G就不同了,\G是以行形式展示結果,列名:具體的信息構成一行。
?那么啥時候用\G呢?如果某一個表格它的屬性特別多,那么用;打印出來的結果就特別難看。比如說我們mysql數據庫下的user表。由于這個表的列屬性特別多,屏幕顯示不下,就會換行,然后就很難看。此時我們就可以使用\G
select * from user;
?select * from user\G
這樣看起來就非常好看。
中斷輸入 ctrl + c
當我們在輸入SQL語句的時候,如果輸錯了可以用ctrl + c 中斷當前的輸入。?
查看命令列表 help
mysql有一組自己的命令,可以輸入help 或者\h查看命令列表
這個列表里就展示了mysql所有的指令,前面表示完整的指令,后面表示的是短指令的格式,是等價的關系。
下面我們就來介紹一下常用的指令
? (\?)
這個作用和help是一樣的。也是查看命令列表
connect (\r)
如果你有需求要重新連接服務器,直接使用這個命令即可,不用退出再連了,我們可以看到每次連接的id是不同的。
?重新連接服務器
status (\s)
我們可以使用status這個命令查看服務器的狀態,里面包含了很多信息,我們可以看到connection id和上面我們重新連接后的是一樣的。
delimiter (\d)
重新指定SQL語句的結束標識符 ,SQL語句可以以 ; \g \G作為結束標識符,我們也可以自己使用\d這個命令指定SQL語句的標識符。以后我們在哪里看到SQL語句是以其他字符作為結尾不要驚訝,它肯定是用\d重新指定了SQL語句的標識符。這個地方指定的時候不要指定一些使用到的,比如什么 單引號雙引號。
?exit (\q) quit (\q)?
exit和quit都是用來退出客戶端的。
tee (\T)
把所有執行結果保存到一個指定的文件當中
我們cat一下這個文件,就可以看到保存的SQL語句執行結果。
?notee (\t)?
執行結果不在寫入文件,這個指令沒有參數。
prompt (\R)
\R用來修改提示符?,默認的提示符是mysql>。
source (\.)
加載并執行指定的.sql腳本?
當我們需要把一個數據庫從一臺服務器A復制到另一臺服務器B上,那么我們可以先把服務器A導出數據到.sql文件,然后在到服務器B上執行這個.sql文件。
下面我們準備了一些SQL語句,大家可以把下面的SQL語句賦值到本地的一個.sql文件里,然后導入到xshell里執行。
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;
直接 source sql文件的絕對路徑,就可以。
先把本地的.sql文件傳到服務器上。
我們查看一下當前數據庫中有沒有test_db這個庫?。
接下來執行這個.sql文件。我們可以看到是執行成功了
此時我們查看一下是否多出一個test_db的數據庫 。我們可以看到是成功插入的
接下來我們把該數據庫刪除掉。
我們可以直接在xshell中直接執行sql語句,而不需要登錄sql。
執行完畢后我們可以看下是否成功創建了test_db數據庫。我可以看到果然成功創建。
system (\!)
執行系統命令,我們可以用該命令執行xshell下的一些命令。
我們常用的是 system clear,當我們命令輸入的很多時,可以用該命令清屏。
也可以執行pwd、ls各種命令。
這個命令是很危險的,如果黑客拿到了你的mysql密碼,登錄你的客戶端,就可以使用system查看你xshell上的一些文件,比如說/etc/passwd文件,這個文件下記錄的是用戶和用戶組對應的權限。從而拿到用戶權限攻陷系統。
如果它攻陷不了還可以給你創建一個文件里面顯示一些什么系統故障請聯系QQXXXXXX,然后如果經驗不足就容易上當。
use (\u)
這命令我們經常用,使用個數據庫就不多說了
help contents
顯示服務端的幫助文檔,類似于一個官方文檔。
比如我們查看一下數據類型?
再查一下具體的INT類型?