liux's blog

1433223

  1. 1. 安装
  2. 2. 修改命令提示字串
  3. 3. 命令搜索功能
  4. 4. 删除所有表

遇到啥东西总想在本地搞一套环境,之前大多用sqlite临时搞的数据库,东西多了以后还是整个mysql吧。

这就是差生文具多吧。代码还没写几行,环境全搭了一遍。

安装

感谢brew,非常方便:brew install mysql
自动编译安装好以后,后台启动:brew services start mysql
初次安装设置下密码:mysql_secure_installation

修改命令提示字串

加上server和db名称,删错表的概率能降一点是一点。

使用.my.cnf自动配置:

1
2
[mysql]
prompt="mysql \U:\d > "

参考:

https://dev.mysql.com/doc/refman/8.0/en/mysql-commands.html

命令搜索功能

首先查看mysql使用的输入库(libedit 或 readline):otool -L $(which mysql)(或者ldd)

image-20211107193801920

如果是libedit,使用~/.editrc配置:

1
2
bind "^R" em-inc-search-prev
bind "^S" em-inc-search-next

如果是readline,使用~/.inputrc配置:

1
2
3
4
$if Mysql
"\C-r": reverse-search-history
"\C-s": forward-search-history
$endif

参考:
https://codeinthehole.com/tips/the-most-important-command-line-tip-incremental-history-searching-with-inputrc/
https://dev.mysql.com/doc/refman/8.0/en/mysql-tips.html#mysql-input-editing
https://certif.com/spec_print/libedit.html

删除所有表

有时候需要删掉一个库中的所有表(问就是懒得重新建库),记录一下脚本。

临时关掉外键检查是为了避免删表时候报错,默认只设置SESSION变量,不会影响到全局。

1
2
3
4
5
6
7
8
9
10
11
12
SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables
FROM information_schema.tables
WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@tables,'dummy') INTO @tables;
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;

参考:

https://stackoverflow.com/questions/12403662/how-to-remove-all-mysql-tables-from-the-command-line-without-drop-database-permi/18625545#18625545

本文最后更新于 天前,文中所描述的信息可能已发生改变