
文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载在运行数据库种子seed脚本时往往需要一段醒目的提示信息来标记脚本开始执行本文将介绍如何借助 MySQL 客户端的 shell 命令\system及其简写\!在脚本被批处理执行时把自定义横幅输出到 stdout。读完本文你将掌握在seed_data.sql这类脚本中插入可读横幅的完整写法并了解它在种子脚本、数据回灌等场景下与事务、insert ignore等技巧的组合用法。场景给种子脚本加上执行提示当我们准备了一个用于初始化数据库的 SQL 文件例如通过mysqldump导出的备份或手工编写的种子数据脚本参见仓库笔记 dump-a-database-to-a-file.md并希望在整个文件开始执行时先向终端回显一条消息说明开始加载种子数据时通常有两类做法在 shell 层面拼接echo例如echo ... mysql ... seed.sql直接把提示写进 SQL 文件内部让它跟随脚本一起执行。第二种做法的好处是提示信息与数据脚本始终同步存在任何人拿到这个.sql文件无论用什么方式执行重定向、管道、客户端工具横幅都会自动出现不会因忘记在命令行上补一句echo而缺失。这正是本仓库笔记 echo-a-message-from-a-sql-file.md 所讲解的技巧。MySQL 客户端的 shell 命令\system与\!MySQL 客户端mysql提供了一组客户端自身解析的shell 命令它们不是发送给服务器执行的 SQL而是在本地由客户端进程处理。其中\system命令用来执行一条操作系统的 shell 命令并直接把该命令的输出写入 stdout它还有一个等价的简写形式\!。\! ls -l \system date上面两条都会在客户端本地执行对应系统命令并把结果打印到终端。利用这一点我们可以在 SQL 文件的任意位置调用系统的echo命令来输出提示文本。注意\system/\!执行的是客户端所在机器的本地命令与 MySQL 服务器无关也不受服务器端权限控制它的输出与 SQL 查询结果一样流向标准输出。完整示例向种子脚本添加横幅下面是一个典型的种子脚本开头写法沿用原文档 echo-a-message-from-a-sql-file.md 的示例在执行insert into products ...之前先用五条\! echo打印出一个用*绘制的横幅\! echo ***************************************** \! echo * * \! echo * Loading seed data into the database * \! echo * * \! echo ***************************************** insert into products ...要点拆解每条\! echo ...都会在脚本执行到该行时立即在终端输出一行文本横幅因此逐行打印出来echo是系统命令文本需要用单引号包裹防止被 shell 展开例如*在双引号下可能触发路径通配横幅与后续 SQL 之间留空行便于阅读也避免影响语句解析。运行效果批处理模式同样生效把脚本通过标准输入重定向交给mysql客户端执行时横幅会原样出现在查询结果之前。原文档中的运行示例连接参数为-h ::1 -P 3306 -u root -D local_database$ mysql -h ::1 -P 3306 -u root -D local_database seed_data.sql ***************************************** * * * Loading seed data into the database * * * *****************************************可见\!命令在非交互式批处理模式下同样被客户端解析执行——这正是它能写进脚本文件、随文件一起分发的原因。需要注意的是横幅打印位置紧跟在脚本执行的起点之后才开始执行insert等语句因此把它放在文件头部就能起到脚本开始的标记作用。与种子脚本相关的组合技巧种子脚本往往不是孤立的一次性操作结合本仓库mysql/目录下的其他笔记可以把这套横幅 数据装载的流程做得更稳幂等装载种子数据可能重复执行而触发主键/唯一键冲突。仓库笔记 ignore-duplicates-when-inserting-records.md 指出将insert改为insert ignore可让重复行被丢弃并转为 warning而不是中止整个脚本——与横幅配合脚本执行过程更可控事务包裹对生产库做修改型种子/修复脚本时可在文件内用start transaction; ... commit;必要时rollback包裹变更先验证再提交参见 run-statements-in-a-transaction.md安全更新模式连接时使用--safe-updates或--i-am-a-dummy可阻止不带 KEY 条件 WHERE 的update/delete误伤数据适合在种子清理场景下兜底参见 connect-to-a-database-in-safe-update-mode.md输出格式化脚本中的show类查询可用\G结尾获得纵向输出横幅配合纵向结果在终端上更易读参见 display-output-in-a-vertical-format.md。小结\system/\!是 MySQL 客户端内置的 shell 命令透传入口把它与系统的echo结合就能在 SQL 文件内部声明执行提示且该提示在交互式与批处理模式下都会生效。对于mysql ... seed_data.sql这类常见的种子装载方式这是一种零额外依赖、随文件自带的输出标记方案可以让脚本的执行过程在终端上一目了然。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐x64dbg 脚本引擎 error 命令显示错误信息并终止脚本执行x64dbg 脚本引擎 error 命令显示错误信息并终止脚本执行 导读 error 是 x64dbg 脚本引擎simple script engine中逆向工程调试器开发工具应用安全linux-command 项目 mysql 命令详解MySQL 命令行客户端完整使用指南linux command 项目 mysql 命令详解MySQL 命令行客户端完整使用指南 本文以 Linux 命令大全项目linux command中收文档教程neofetch 命令详解在终端显示系统信息与发行版徽标linux-command 命令手册neofetch 命令详解在终端显示系统信息与发行版徽标linux command 命令手册 neofetch 是一款在终端中显示系统摘要信息并配以发行版文档教程上一篇IPXWrapper给经典游戏请一位 IPX 协议翻译官Windows 10/11 局域网联机一步到位下一篇微信聊天记录导出三步搞定免费开源的 WeChatMsg把对话稳稳存进本地创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考