为什么我们不在源filename.sql之后使用半冒号?

问题描述 投票:1回答:2

在终端上将sql文件导入mysql时,为什么不在最后添加一个半冒号呢?

喜欢 :

source file.sql
mysql
2个回答
1
投票

分号“;”是mysql中的一个sql终止符意味着它告诉mysql一个sql语句已经完成,直到这里....所以它在mysql提示符中使用但不在linux shell或命令提示符下。

此外,如果您正在执行单个sql语句,则它不是必需的,因为只有在使用多个sql语句时它才是必需的。

您还可以在以下帮助链接中查看更多详细信息。

http://dev.mysql.com/doc/refman/5.7/en/entering-queries.html

UPDATE1:

更好的选择是从mysql实用程序导入,如下所示 -

mysql -uroot -p my_db < /my_file_path/file.sql

但如果你想按来源做,那么按以下方式做 -

通过下面的命令连接mysql提示符,或者你可以使用任何gui工具。

mysql -uroot -p

现在从mysql提示符执行以下命令 -

mysql> source /tmp/file.sql

注意:mysql应该在你的文件存在的路径上拥有权限mysql在/ tmp中拥有权限你可以在my.cnf或my.ini中或通过“SHOW VARIABLES LIKE'tmpdir'”命令检查它的确切位置。

特殊:由于此路径被mysql用于临时文件,因此请勿在此处保留重要文件。


1
投票

source是一个MySQL client command,而不是SQL命令。

您可能熟悉的另一个客户命令是delimiter。它用于更改语句终止符,因此您可以使用包含分号的CREATE PROCEDURE语句。有时候我会使用双分号,因为这绝对不会在程序的主体中使用。

mysql> delimiter ;;
mysql> CREATE PROCEDURE ... BEGIN ... END ;;

然后你可以将分隔符设置回习惯的;

mysql> delimiter ;

现在考虑一下:如果像delimiter这样的mysql客户端命令需要有一个分号终结符,那么上面的命令会让人感到困惑。 delimiter ;;实际上会将分隔符设置为单个;,然后是语句终止符;吗? delimiter ;会将终结者设置为空白吗?

mysql客户端使用的解决方案是内置命令不需要语句终止符。

这适用于所有客户端构建的命令,例如:

mysql> source file.sql
mysql> pager less
mysql> warnings
mysql> tee outfile.txt 
© www.soinside.com 2019 - 2024. All rights reserved.