MySQL - 其他操作
一、关于prompt参数
当我们登录到MySQL后,MySQL只是简单的提示mysql>
,没有其他的信息,对我们来说,意义不大,那么通过prompt
参数就可以来自定义显式一些重要的信息,比如:登录的用户名、主机地址、当前所在的数据库等信息。
那么如何使用prompt
参数呢?有两种方式:
- 登录MySQL时,在命令行中使用。
- 定义在配置文件中。
1.1 命令行中配置
在登录MySQL时,跟参数:
1 [root@cs ~]# mysql -uroot -p --prompt="\\u@\\h : \\d \\r:\\m:\\s>" 2 Enter password: 3 Welcome to the MySQL monitor. Commands end with ; or \g. 4 Your MySQL connection id is 12 5 Server version: 5.7.20 MySQL Community Server (GPL) 6 7 Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 8 9 Oracle is a registered trademark of Oracle Corporation and/or its 10 affiliates. Other names may be trademarks of their respective 11 owners. 12 13 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 14 15 root@localhost : (none)05:41:53>use data_test; 16 Database changed 17 root@localhost : data_test 05:42:11>
注意,--prompt="\\u@\\h : \\d\\r:\\m:\\s>"
参数后的值一定是双引号标识,单引号不行!
这种方式,仅适用于本次登录生效。
1.2 配置文件中配置
如果在命令行中写太麻烦,想要永久生效,就要在配置文件中定义,编辑配置文件/etc/my.cnf
1 [mysql] 2 prompt="\\u@\\h :\\d \\r:\\m:\\s>" 3 # 也可以这么写 4 # prompt=3306 [\\d]>
这样,每次登录就会自动生效了。
PS:每个参数都加两个\\
,但我看加一个也能行!
1.3 常用的prompt参数
参数 | 描述 |
---|---|
\u |
登录用户名 |
\h |
登录主机 |
\d |
此时use的数据库,没有则显式none |
\r:\m:\s |
当前的时分秒 |
\U |
显式你的全名user_name@host_name ,等价于\u@\h |
二、三元表达式
用到的数据:school.sql
Zhangkai's blogs 朋友 资源 技术栈新建文章文章列表 管理 MySQL - 其他操作 目录 关于prompt参数 命令行中配置 配置文件中配置 常用的prompt参数 三元表达式 在MySQL中执行系统命令 返回MySQL目录 关于prompt参数# 当我们登录到MySQL后,MySQL只是简单的提示mysql>,没有其他的信息,对我们来说,意义不大,那么通过prompt参数就可以来自定义显式一些重要的信息,比如:登录的用户名、主机地址、当前所在的数据库等信息。 那么如何使用prompt参数呢?有两种方式: 登录MySQL时,在命令行中使用。 定义在配置文件中。 命令行中配置# 在登录MySQL时,跟参数: [root@cs ~]# mysql -uroot -p --prompt="\\u@\\h : \\d \\r:\\m:\\s>" Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 5.7.20 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. root@localhost : (none)05:41:53>use data_test; Database changed root@localhost : data_test 05:42:11> 注意,--prompt="\\u@\\h : \\d\\r:\\m:\\s>"参数后的值一定是双引号标识,单引号不行! 这种方式,仅适用于本次登录生效。 配置文件中配置# 如果在命令行中写太麻烦,想要永久生效,就要在配置文件中定义,编辑配置文件/etc/my.cnf: [mysql] prompt="\\u@\\h :\\d \\r:\\m:\\s>" # 也可以这么写 # prompt=3306 [\\d]> 这样,每次登录就会自动生效了。 PS:每个参数都加两个\\,但我看加一个也能行! 常用的prompt参数# 这里列出常用的参数: 参数 描述 \u 登录用户名 \h 登录主机 \d 此时use的数据库,没有则显式none \r:\m:\s 当前的时分秒 \U 显式你的全名user_name@host_name,等价于\u@\h 更多参考官网: 三元表达式# 用到的数据:school.sql -- mysql -uroot -p <school.sql DROP DATABASE IF EXISTS school; CREATE DATABASE school CHARSET utf8; USE school; SET AUTOCOMMIT=0; SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for `class` -- ---------------------------- DROP TABLE IF EXISTS `class`; CREATE TABLE `class` ( `cid` int(11) NOT NULL AUTO_INCREMENT, `caption` varchar(32) NOT NULL, PRIMARY KEY (`cid`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of `class` -- ---------------------------- BEGIN; INSERT INTO `class` VALUES ('1', '三年二班'), ('2', '三年三班'), ('3', '一年二班'), ('4', '二年九班'); COMMIT; -- ---------------------------- -- Table structure for `course` -- ---------------------------- DROP TABLE IF EXISTS `course`; CREATE TABLE `course` ( `cid` int(11) NOT NULL AUTO_INCREMENT, `cname` varchar(32) NOT NULL, `teacher_id` int(11) NOT NULL, PRIMARY KEY (`cid`), KEY `fk_course_teacher` (`teacher_id`), CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of `course` -- ---------------------------- BEGIN; INSERT INTO `course` VALUES ('1', '生物', '1'), ('2', '物理', '2'), ('3', '体育', '3'), ('4', '美术', '2'); COMMIT; -- ---------------------------- -- Table structure for `score` -- ---------------------------- DROP TABLE IF EXISTS `score`; CREATE TABLE `score` ( `sid` int(11) NOT NULL AUTO_INCREMENT, `student_id` int(11) NOT NULL, `course_id` int(11) NOT NULL, `num` int(11) NOT NULL, PRIMARY KEY (`sid`), KEY `fk_score_student` (`student_id`), KEY `fk_score_course` (`course_id`), CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`), CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`) ) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of `score` -- ---------------------------- BEGIN; INSERT INTO `score` VALUES ('1', '1', '1', '10'), ('2', '1', '2', '9'), ('5', '1', '4', '66'), ('6', '2', '1', '8'), ('8', '2', '3', '68'), ('9', '2', '4', '99'), ('10', '3', '1', '77'), ('11', '3', '2', '66'), ('12', '3', '3', '87'), ('13', '3', '4', '99'), ('14', '4', '1', '79'), ('15', '4', '2', '11'), ('16', '4', '3', '67'), ('17', '4', '4', '100'), ('18', '5', '1', '79'), ('19', '5', '2', '11'), ('20', '5', '3', '67'), ('21', '5', '4', '100'), ('22', '6', '1', '9'), ('23', '6', '2', '100'), ('24', '6', '3', '67'), ('25', '6', '4', '100'), ('26', '7', '1', '9'), ('27', '7', '2', '100'), ('28', '7', '3', '67'), ('29', '7', '4', '88'), ('30', '8', '1', '9'), ('31', '8', '2', '100'), ('32', '8', '3', '67'), ('33', '8', '4', '88'), ('34', '9', '1', '91'), ('35', '9', '2', '88'), ('36', '9', '3', '67'), ('37', '9', '4', '22'), ('38', '10', '1', '90'), ('39', '10', '2', '77'), ('40', '10', '3', '43'), ('41', '10', '4', '87'), ('42', '11', '1', '90'), ('43', '11', '2', '77'), ('44', '11', '3', '43'), ('45', '11', '4', '87'), ('46', '12', '1', '90'), ('47', '12', '2', '77'), ('48', '12', '3', '43'), ('49', '12', '4', '87'), ('52', '13', '3', '87'); COMMIT; -- ---------------------------- -- Table structure for `student` -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `sid` int(11) NOT NULL AUTO_INCREMENT, `gender` char(1) NOT NULL, `class_id` int(11) NOT NULL, `sname` varchar(32) NOT NULL, PRIMARY KEY (`sid`), KEY `fk_class` (`class_id`), CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of `student` -- ---------------------------- BEGIN; INSERT INTO `student` VALUES ('1', '男', '1', '理解'), ('2', '女', '1', '钢蛋'), ('3', '男', '1', '张三'), ('4', '男', '1', '张一'), ('5', '女', '1', '张二'), ('6', '男', '1', '张四'), ('7', '女', '2', '铁锤'), ('8', '男', '2', '李三'), ('9', '男', '2', '李一'), ('10', '女', '2', '李二'), ('11', '男', '2', '李四'), ('12', '女', '3', '如花'), ('13', '男', '3', '刘三'), ('14', '男', '3', '刘一'), ('15', '女', '3', '刘二'), ('16', '男', '3', '刘四'); COMMIT; -- ---------------------------- -- Table structure for `teacher` -- ---------------------------- DROP TABLE IF EXISTS `teacher`; CREATE TABLE `teacher` ( `tid` int(11) NOT NULL AUTO_INCREMENT, `tname` varchar(32) NOT NULL, PRIMARY KEY (`tid`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of `teacher` -- ---------------------------- BEGIN; INSERT INTO `teacher` VALUES ('1', '张磊老师'), ('2', '李平老师'), ('3', '刘海燕老师'), ('4', '朱云海老师'), ('5', '李杰老师'); COMMIT; SET FOREIGN_KEY_CHECKS = 1; 在Python种,三元表达式在某些时候非常方便,经过了解,MySQL也能支持三元运算!!所以特来记录下!!!! 丑话说在前头,MySQL中这种三元运算性能低下!这些是其实在后端处理更好!! 先来看示例: -- 统计每个同学的总分数 SELECT student.sid, student.sname, SUM(num) FROM student LEFT JOIN score ON student.sid=score.student_id GROUP BY student.sid; +-----+--------+----------+ | sid | sname | SUM(num) | +-----+--------+----------+ | 1 | 理解 | 85 | | 2 | 钢蛋 | 175 | | 3 | 张三 | 329 | | 4 | 张一 | 257 | | 5 | 张二 | 257 | | 6 | 张四 | 276 | | 7 | 铁锤 | 264 | | 8 | 李三 | 264 | | 9 | 李一 | 268 | | 10 | 李二 | 297 | | 11 | 李四 | 297 | | 12 | 如花 | 297 | | 13 | 刘三 | 87 | | 14 | 刘一 | NULL | | 15 | 刘二 | NULL | | 16 | 刘四 | NULL | +-----+--------+----------+ 16 rows in set (0.00 sec) 我想将那些结果为NULL的替换为0,或者其他自定义字符,这里就用到了三元表达式了,MySQL中支持两种三元运算: -- 简单,性能低下 IF (条件表达式,条件为true的结果, 条件为false的结果) -- 稍微复杂的,但性能高点(有限!)的 case when 条件 then (条件为true时执行) else(条件为false时执行) end -- end不可少 -- 用法: SELECT student.sid, student.sname, -- IF (SUM(num),SUM(num), 0) -- if的示例 (CASE WHEN SUM(num) THEN SUM(num) ELSE 0 END) AS '总分' -- 为了避免意外,我将三元表达式用括号整体括起来了,和后面 AS 分开 FROM student LEFT JOIN score ON student.sid=score.student_id GROUP BY student.sid; +-----+--------+--------+ | sid | sname | 总分 | +-----+--------+--------+ | 1 | 理解 | 85 | | 2 | 钢蛋 | 175 | | 3 | 张三 | 329 | | 4 | 张一 | 257 | | 5 | 张二 | 257 | | 6 | 张四 | 276 | | 7 | 铁锤 | 264 | | 8 | 李三 | 264 | | 9 | 李一 | 268 | | 10 | 李二 | 297 | | 11 | 李四 | 297 | | 12 | 如花 | 297 | | 13 | 刘三 | 87 | | 14 | 刘一 | 0 | | 15 | 刘二 | 0 | | 16 | 刘四 | 0 | +-----+--------+--------+ 16 rows in set (0.00 sec) 在MySQL中执行系统命令# centos7.3 + mysql5.7.20 MySQL客户端中可以通过system命令来执行系统的shell命令: mysql> system cat /data/mysql/auto.cnf [auto] server-uuid=f352c664-a926-11ea-a90d-000c29872edd mysql> system ls /data/mysql/ auto.cnf cs.pid data_test ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 ibtmp1 mysql performance_schema that's all, see alse: see also:mysql prompt的用法详解 | MySQL5.7官网手册 作者: 听雨危楼 出处:https://www.cnblogs.com/Neeo/articles/13524954.html 版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。 仰望星空,脚踏实地 分类: MySQL 0 0 posted @ 2020-08-18 18:04 听雨危楼 阅读(57) 评论(0) 编辑 收藏 发表评论 编辑 预览 支持 Markdown 自动补全 退出 订阅评论 我的博客 [Ctrl+Enter快捷键提交] 园子动态: · 致园友们的一封检讨书:都是我们的错 · 数据库实例 CPU 100% 引发全站故障 · 发起一个开源项目:博客引擎 fluss 最新新闻: · DeepMind和利物浦足球俱乐部合作 用AI让战术更灵活更有效 · 刷好评服务器出现数据泄露 20多万亚马逊账号恐将清洗 · 苹果发起调查:想要了解Apple Watch用户是如何监测健康数据的 · 索尼第三代降噪豆WF-1000XM4曝6月发布:首次支持无线充电 · 讯飞双屏翻译机图赏:前后双屏 还支持翻转 » 更多新闻... Copyright © 2021 听雨危楼 Powered by .NET 5.0 on Kubernetes & Theme Silence v3.0.0
在Python种,三元表达式在某些时候非常方便,经过了解,MySQL也能支持三元运算!!所以特来记录下!!!!
丑话说在前头,MySQL中这种三元运算性能低下!这些是其实在后端处理更好!!
先来看示例:
-- 统计每个同学的总分数 SELECT student.sid, student.sname, SUM(num) FROM student LEFT JOIN score ON student.sid=score.student_id GROUP BY student.sid; +-----+--------+----------+ | sid | sname | SUM(num) | +-----+--------+----------+ | 1 | 理解 | 85 | | 2 | 钢蛋 | 175 | | 3 | 张三 | 329 | | 4 | 张一 | 257 | | 5 | 张二 | 257 | | 6 | 张四 | 276 | | 7 | 铁锤 | 264 | | 8 | 李三 | 264 | | 9 | 李一 | 268 | | 10 | 李二 | 297 | | 11 | 李四 | 297 | | 12 | 如花 | 297 | | 13 | 刘三 | 87 | | 14 | 刘一 | NULL | | 15 | 刘二 | NULL | | 16 | 刘四 | NULL | +-----+--------+----------+ 16 rows in set (0.00 sec)
我想将那些结果为NULL
的替换为0,或者其他自定义字符,这里就用到了三元表达式了,MySQL中支持两种三元运算:
-- 简单,性能低下 IF (条件表达式,条件为true的结果, 条件为false的结果) -- 稍微复杂的,但性能高点(有限!)的 case when 条件 then (条件为true时执行) else(条件为false时执行) end -- end不可少 -- 用法: SELECT student.sid, student.sname, -- IF (SUM(num),SUM(num), 0) -- if的示例 (CASE WHEN SUM(num) THEN SUM(num) ELSE 0 END) AS '总分' -- 为了避免意外,我将三元表达式用括号整体括起来了,和后面 AS 分开 FROM student LEFT JOIN score ON student.sid=score.student_id GROUP BY student.sid; +-----+--------+--------+ | sid | sname | 总分 | +-----+--------+--------+ | 1 | 理解 | 85 | | 2 | 钢蛋 | 175 | | 3 | 张三 | 329 | | 4 | 张一 | 257 | | 5 | 张二 | 257 | | 6 | 张四 | 276 | | 7 | 铁锤 | 264 | | 8 | 李三 | 264 | | 9 | 李一 | 268 | | 10 | 李二 | 297 | | 11 | 李四 | 297 | | 12 | 如花 | 297 | | 13 | 刘三 | 87 | | 14 | 刘一 | 0 | | 15 | 刘二 | 0 | | 16 | 刘四 | 0 | +-----+--------+--------+ 16 rows in set (0.00 sec)
三、在MySQL中执行系统命令
centos7.3 + mysql5.7.20
MySQL客户端中可以通过system
命令来执行系统的shell命令:
1 mysql> system cat /data/mysql/auto.cnf 2 [auto] 3 server-uuid=f352c664-a926-11ea-a90d-000c29872edd 4 mysql> system ls /data/mysql/ 5 auto.cnf cs.pid data_test ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 ibtmp1 mysql performance_schema