mysql数据库分隔符_MySQL对分隔符的处理(一)
MySQL的语法与标准SQL语法相同,默认使用分号“;”作为一条SQL语句结束的标志。且可以使用delimiter命令将其修改成其他符号,如:“delimiter |”。在MySQL看来所有的语句可以分为两类,一类是SQL Statement(SQL语句),一类是Command Statement(系统命令)。
系统命令无需在语句结尾处添加分号直接回车即可,通常情况下长格式的系统命令在行尾添加分号不会影响命令的正常执行,如:use test;。习惯了每敲一条命令都打一个分号的管理员和程序员们现在注意了,分号不要随便敲,MySQL在这里给我们挖了一个坑。
让我们来看一个案例:
使用mysqldump命令导出一个名为"pp#idhuishou"的表,mysqldump -uroot -p test pp#idhuishou -r pp#idhuishou.sql,文件名与表名相同都含有一个井号。 使用SOURCE命令再导入数据的时候,我又习惯性的在结尾多打了一个分号,结果敲完分号再敲回车语句不执行,如果不敲分号,语句正常执行,数据被成功灌入,显然是客户端把井号后的内容当成注释来处理了。
mysql> source pp#idhuishou.sql;
->
变通解决办法:
使用输入重定向的方式导入mysql -uroot -p test < pp#idhuishou.sql
将文件重命名再SOURCE,不包含井号就不会受分号影响mv pp#idhuishou.sql idhuishou.sql
让我们分析一下MySQL倒底搞了什么鬼,MySQL处理一条语句首先要判断这条语句是否为系统命令,如果是系统命令会有单独的函数单独处理,如:com_warnings,com_use,com_source,com_help等。
Code:
static int read_and_execute(bool in interactive) {
for(;;) {
... ...
if ((named_cmds || glob_buffer.is_empty()) && !ml_comment && !in_string && (com=find_command(line,0)))
//find_command函数用来判断一条语句是否为系统命令 {
if ((*com->func)(&glob_buffer,line) > 0)
//*com->func为一个函数指针,分别指向不同命令的函数,如com_warnings,com_use,com_source,com_help等 break;
if (glob_buffer.is_empty()) // If buffer was emptied
in_string=0;
#ifdef HAVE_READLINE
if (interactive && status.add_to_history && not_in_history(line))
add_history(line);
#endif
continue;
}
if (add_line(glob_buffer,line,&in_string,&ml_comment)) //如果语句不是系统命令就会走到这里
break;
}
/* if in batch mode, send last query even if it doesn't end with \g or go */
if (!interactive && !status.exit_status)
{
remove_cntrl(glob_buffer);
if (!glob_buffer.is_empty())
{
status.exit_status=1;
if (com_go(&glob_buffer,line) <= 0)
status.exit_status=0;
}
}
... ...
}
(未完待续)
mysql数据库分隔符_MySQL对分隔符的处理(一)相关推荐
- mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记
以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库 查看所有数据库:SHOW DATABASES 创建数据库:CREATE DA ...
- mysql数据库导出_MySQL数据库导入导出详解[转发]
1. 概述 MySQL数据库的导入,有两种方法: 1) 先导出数据库SQL脚本,再导入: 2) 直接拷贝数据库目录和文件. 在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况 ...
- mysql 数据库编程_MySQL数据库编程(C++语言)
MySQL数据库编程(C++语言) 发布时间:2018-05-24 21:06, 浏览次数:452 , 标签: MySQL 本文主要介绍使用C++语言连接和操作 MySQL 数据库的方法. 1. 准备 ...
- mysql数据库事务_MySQL数据库的事务管理
小伙伴们不好意思,这两天有事没有及时的更新哈~希望小伙伴们见谅,那么开始我们今天的分享. MySQL 数据库的事务 我们之前分享数据库的数据操作,无外乎对数据库的数据进行增.删.改.查.就比如我们去买 ...
- mysql数据库安全审计_MySQL数据库安全日志审计工具
说明 由于MySQL社区版没有自带的审计功能或插件,对于等级保护当中对数据库管理的要求的就存在一定的不满足情况的,抛开条条框框不说数据库的日志是值得研究的,通过收集数据库的日志到企业SOC平台便于安全 ...
- mysql数据库崩_mysql数据库崩溃_MySQL
bitsCN.com 有一个crm系统,其中有做了一个报表统计,其中源码和数据库放在同意一台机子上,数据库用mysql:但在今天突然报错页面提示不能用root@locahost连接 用命令行登录,提示 ...
- 查看mysql数据库版本_MySQL数据库之查看MySQL版本的四种方法
本文主要向大家介绍了MySQL数据库之查看MySQL版本的四种方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.终端下直接使用mysql命令 [root@localhos ...
- mysql数据库设计规范_MYSQL数据库设计规范与原则
MYSQL数据库设计规范 1.数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确(长度不能超过30个字符); 例如:user, stat ...
- mysql数据库属性_mysql - 数据库操作和数据属性
数据库操作 启动 mysql, mac 可通过 brew 安装 mysql 后启动. window 需要手动配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14mysql.serve ...
- mysql数据库套件_MySQL数据库管理开发套件(EMS SQL Management Studio For MySQL)下载 v1.3.0.46170 官方版 - 比克尔下载...
EMS SQL Management Studio For MySQL是一个强大的MySQL数据库管理和开发套件,由很多工具组成,涉及MySQL数据库管理.导入.导出.迁移.测试.备份.比较.同步等数 ...
最新文章
- 十一月工作小记--上线前的冲刺
- 孙正义:互联网流量将转化为智能AI流量,我的时代终于来了
- (八)流程控制 for标签和if标签
- java Android版_java-Android系统版本
- Github 简明教程
- Dell服务器常用管理命令总结
- Python自动化运维开发----基础(四)列表基础
- GDCM:gdcm::Spacing的测试程序
- django写原生sql语句
- wp博客链接.html,WordPress博客文章标题链接到自定义网址链接
- C++官方文档-this
- #pragma pack (n) 惹的祸
- 基于能量采集的认知无线电时间和功率分配(一)——知识扫盲
- ST芯片涨价后,你是如何做的?
- oracle 10g、11g、 12c、19c有什么区别
- A股:我要加区块链,监管:你可消停会
- sap清账使用反记账_SAP反记账功能祥解
- 第2章 获得文本语料和词汇资源
- Hadoop+hive+flask+echarts大数据可视化项目之hive环境搭建与系统数据的分析思路
- IP-guard和Ping32屏幕监控对比