繁体   English   中英

使用MariaDB / MySQL持续获得1064

Keep getting 1064 with MariaDB/MySQL

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在努力使下面的触发器与我的数据库一起编译。 现在,其MariaDB v5.5.56。 我已经在在线验证器中尝试了这种语法,结果如下:

SQLFiddle:

  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 '' at line 4

https://www.eversql.com/sql-syntax-check-validator/

 Great work, the query's syntax is valid!

https://rextester.com/l/mysql_online_compiler

 Compiles with no errors

在我的环境中,我得到:

 Error Code: 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 '' at line 4.

我的错误似乎与SQLFiddle错误匹配...但是其他解析器工作正常也很奇怪。 基于数据库版本的语法可能有问题吗?

这是我要执行的操作:

 CREATE TRIGGER insert_pad
 BEFORE INSERT on vehicles FOR EACH ROW
 BEGIN
 DECLARE done INT DEFAULT FALSE;
 DECLARE localid CHAR(17);
 DECLARE veh_mod CHAR(17);
 DECLARE cur1 CURSOR FOR select id, RPAD(vin, 17,'Q') from   vehicles where length(rtrim(vin)) < 17;
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

 OPEN cur1;

 read_loop: LOOP
 FETCH cur1 INTO localid, veh_mod;

 IF done THEN
  LEAVE read_loop;
 END IF;
 UPDATE vehicles SET vin = veh_mod WHERE id = localid;


 END LOOP;

 CLOSE cur1;

 END;

如果有人有任何想法,我很想听听他们的意见! 再次感谢!

1 个回复

我没有看到定界符的变化。 否则,第4行的分号将终止该语句,这将引发错误。

DELIMITER语句更改语句定界符。 我们想要将其更改为一些我们想要执行的语句中未出现的字符串。 在此示例中,我们将分隔符更改为两个美元符号,然后将其更改回默认的分号。

DELIMITER $$

CREATE TRIGGER insert_pad
BEFORE INSERT on vehicles FOR EACH ROW
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE localid CHAR(17);
  ...
END$$

DELIMITER ;

另一个想法:我认为触发器不允许针对导致触发器被触发的语句中引用的表发出DML(插入/更新/删除)。

但是在INSERT触发器之前,我们被允许引用和修改将要插入的行的列的值。 我们使用特殊的限定词NEW. 引用要插入的行中的列。 例如:

 DELIMITER $$

 CREATE TRIGGER insert_pad
 BEFORE INSERT ON vehicles FOR EACH ROW
 BEGIN
   -- if vin less than 17 characters, pad with Q  
   IF( CHAR_LENGTH(TRIM( NEW.vin )) < 17 ) THEN
     SET NEW.vin = RPAD(TRIM( NEW.vin ), 17,'Q');
   END IF;
 END$$

 DELIMITER ;
1 使用MySQL和MariaDB创建表Order产生1064错误

我正在尝试使用MySQL和MariaDB创建一个名为Order的表。 我已经删除了除表ID之外的所有内容。 如果我将表名更改为类似Test的名称,则可以使用,但是将表创建为Order,“ Order”或“ Order”不起作用。 SQL: 错误信息: 但这有效: ...

2 MySQL / MariaDB交易访问冲突1064

我在事务查询方面遇到了一些麻烦。 我有2个表,“主题”和链接表调用“ tutorsubjects”。 我正在使用MariaDB 10.0.21版。 我创建了以下查询,但始终收到“语法错误或访问冲突:1064”错误。 以下是解析到查询的值 我收到以下错误: SQLS ...

4 错误#1064与mysql导入,mysql 5.5到mariadb 10.0

我收到一个错误 这似乎发生在随机表上。 我删除了前面的mysql块,它会在出现类似错误之前停止继续运行另外几个表。 我认为这可能与基本语法有关。 使用phpmyadmin导入。 并且原始数据库正在运行MYSQL 5.5.42-37.1-log 新数据库正在运行MYSQL ...

8 MariaDB 和 1064 错误

执行以下代码时出现以下错误: 第 21 行的 ERROR 1064 (42000):您的 SQL 语法有错误; 检查与您的 MariaDB 服务器版本相对应的手册,以了解在@LINE_TERMINATION@ 附近使用的正确语法 这是我用来创建表的代码: 这是我用来填充表格的代码: ...

9 在Raspbian上使用MySQL而不是MariaDB

我正在Raspberry Pi上构建应用程序服务器。 该项目的要求之一是MySQL(不是MariaDB,这是不一样的)。 尝试安装MySQL时,我发现MariaDB是所有Debian发行版中自2017年以来的默认数据库服务器。 很好,但我不想要,我想要MySQL。 当试图寻找答案时, ...

10 使用MySQL而不是MariaDB的XAMPP?

基本上,我想知道在哪里可以找到使用良好的MySQL而不是MariaDB的XAMPP发行版。 我有一个可以在MySQL 5.5.16上正常运行的Drupal站点,但是当我在MySQL 10.1.0-MariaDB上运行它时(这是我下载的较新XAMPP附带的内容),如果不破坏缓存,就无法清除缓存。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM