Navicat按下CTRL+SHIFT+R时的运行方式,运行报错显示附近语法有问题

运行机制研究

众所周知,在Navicat面板中按下CTRL+R可以运行当前查询窗口的全部或所选的SQL语句;按下CTRL+SHIFT+R可以运行所选SQL语句。

但是不选择SQL语句时,可以按下CTRL+SHIFT+R直接运行一段SQL语句,那此时运行的哪一段SQL语句呢?下面就讨论当按下CTRL+SHIFT+R时语句运行的情况:

1、首先写三句简单的测试语句:

2、先把光标放在第一句SQL语句前面,按下快捷键,发现执行了第一句:
在这里插入图片描述

3、继续测试,把光标放在第一行末尾,发现执行了中间的语句:
在这里插入图片描述

4、接着把光标放在中间一句的前面,执行了中间的语句:
在这里插入图片描述

5、把光标放在中间语句后面,按下快捷键,执行了最后一句语句:
在这里插入图片描述

6、把光标放在最后一句前面,按下快捷键,执行了最后一句:
在这里插入图片描述

7、把光标放在最后一句后面,按下快捷键,发现执行了最后一句:
在这里插入图片描述

总结,按下快捷键CTRL+SHIFT+R时,根据光标的位置执行语句的判断依据为:

1、光标在语句内,执行光标所在语句;
2、否则,当光标后有语句时,执行后面的语句;
3、否则,当光标前有语句时,执行前面的语句;
4、否则,执行空执行。

报错解决分析和方法

报错分析

快捷键运行这两段代码报错

在这里插入图片描述


在这里插入图片描述

报错:1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘select * from player’ at line 3。

在这里插入图片描述

按上面的分析可知执行时,按下快捷键运行时先判断光标是否在语句内,以光标位置向前找分号,找到前面第一个分号,向后找到分号位置,两个分号之间的语句在SQL眼里是一句SQL语句,于是下面这两句语句其实是一句:insert into player (id ,name) values (1, ‘zhangSan’), (3, ‘YuYu’) select * from player; 执行结果自然就报错了。

insert into player (id ,name) values (1, ‘zhangSan’), (3, ‘YuYu’)


select * from player;

解决方法

解决办法为:在要运行的语句前一句后面加上分号,要运行的语句后面加上分号,并把光标放在要运行语句的分号前,如下图,按下快捷键才能执行这句语句。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_50401435/article/details/133830175