mysql - SQL 错误 1064 声明 @VAR
问题描述
我正在研究“使用 SQL 和 Excel 进行数据分析”一书中的示例。源文件之一(称为LoadSQLServer.sql
)以:
CREATE DATABASE SQLBook;
USE SQLBook;
DECLARE @LOADDIR VARCHAR(255) = '/somedir/testdata';
DECLARE @SQL NVARCHAR(MAX);
/*
more queries
*/
我尝试使用以下命令运行脚本:mysql -u root < LoadSQLServer.sql
但是我得到了错误:
第 5 行的 ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'DECLARE LOADDIR VARCHAR(255) = '/somedir/testdata'' 附近使用正确的语法
在遇到上述脚本之前,我设法成功运行了以下脚本(称为script.sql
):
CREATE DATABASE customer;
USE customer;
CREATE TABLE customerslist (
id INT NOT NULL AUTO_INCREMENT,
forename VARCHAR(20) NOT NULL,
surname VARCHAR(20) NOT NULL,
PRIMARY KEY (id) );
/*
more queries
*/
用命令mysql -u root < script.sql
。在这个脚本中没有DECLARE
语句,所以问题LoadSQLServer.sql
应该在这样的语句中。如何解决这个问题呢?
我在 Ubuntu 上工作,输出mysql --version
是:
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper
解决方案
您正在使用 SQL Server 的加载文件。MySQL 不是本书的合适数据库(随版本 8.0 更改),因此没有加载文件。
如果您在合适的计算机上,则可以下载 SQL Server Express。否则,我建议您下载 Postgres 并使用该版本。
注意:作为本书的作者,这是正确的做法。
推荐阅读
- c++ - 为什么我可以读取取消引用的指针,但不能用 C 编写,但可以用 C++ 编写?
- reactjs - 删除带有突变的项目时如何正确修改Apollo缓存
- javascript - 确保最小变量名长度的 Eslint 规则,但不在 JSON 上?
- ios - @EnvironmentObject 可以与不是视图的普通结构一起使用吗?
- linux - 使用 SSL 重定向规则覆盖 nginx 默认 80 规则
- azure - Azure 静态 Web 应用 - 使用 AD SSO 保护
- android - 如何在 gradlew Android 终端上使用参数?
- python - 更新 OpenGL VBO 的最快方法(包括可能扩展的缓冲区)
- r - 从字符串中提取年和月的持续时间并转换为月
- r - Rcpp::abs 默认为 int 而不是 double?