SQL:我的查询中出现错误 1064,我找不到原因

Posted

技术标签:

【中文标题】SQL:我的查询中出现错误 1064,我找不到原因【英文标题】:SQL : Error 1064 in my query, i cannot find why 【发布时间】:2020-01-20 11:26:05 【问题描述】:

我有这个来创建触发器:

CREATE TRIGGER `create_account`
   AFTER INSERT
   ON
       `Client`
   FOR EACH ROW
BEGIN
   SET
       @lastID = (
           SELECT C.idClient
           FROM CLIENT as C
           ORDER BY C.idClient
               DESC
           LIMIT 1
       );
       SET 
       @iban = ('FR1330010000019111679074293');

   SELECT IF(
                  LENGTH(@iban) < 11,
                  CONCAT(
                          REPEAT('0', (11 - LENGTH(@iban))),
                          @iban
                      ),
                  @iban = @iban
              );
   INSERT INTO `Compte`(`idCompte`,
                        `numeroCompte`,
                        `soldeCompte`,
                        `idClientCompte`,
                        `statusCompte`)
   VALUES (NULL, @iban, '0', @lastId, '0');
END

mysql 还给我

1064 - 第 14 行 '' 附近的语法错误"

有人解释一下吗?

谢谢大家。我正在努力解决它。

【问题讨论】:

在尝试创建触发器之前您还记得您的DELIMITER 语句吗? @Nick 是的“DELIMITER |” 您似乎缺少SELECT IF (LENGTH(@iban) &lt; 11...FROM 子句 【参考方案1】:

你想要这样的东西吗? 如果是,那么附加信息:https://www.w3resource.com/mysql/control-flow-functions/if-function.php

IF 函数不需要 SELECT 子句。 我在这里测试过:TEST

CREATE TRIGGER `create_account`
   AFTER INSERT
   ON
       `Client`
   FOR EACH ROW
BEGIN
   SET
       @lastID = (
           SELECT C.idClient
           FROM Client C
           ORDER BY C.idClient
               DESC
           LIMIT 1
       );
       SET 
       @iban = ('FR1330010000019111679074293');

   set @iban = IF(
                  LENGTH(@iban) < 11,
                  CONCAT(
                          REPEAT('0', (11 - LENGTH(@iban))),
                          @iban
                      ),
                  @iban
              );


   INSERT INTO Compte(idCompte,
                      numeroCompte,
                      soldeCompte,
                      idClientCompte,
                      statusCompte)
   VALUES (NULL, @iban, '0', @lastId, '0');

END;
/

【讨论】:

好的,一切正常。谢谢大家!我很接近......但没有以正确的方式阅读文档! @FrenchyCoder 我不明白人们为什么要这样做。你的问题是Error 1064 in my query, i cannot find why。我已经解决了你的错误。我不知道也无法知道您对这个触发器还有什么其他计划。我相信每个人都可以以更好的方式做一些事情,但也许您刚刚开始创建触发器...这不是一个问题...为什么您从我的答案中删除了正确答案? 我删除了什么?我不明白你的意思......是我在 *** 中唯一的第二个问题。也许我在这篇文章上做错了什么? 好的,我明白你的意思(左边的绿色 V),我再补充一次。我知道我不能将此添加到所有其他答案中! 是的,当您获得一些声望点时,您将能够对那些对您有一点帮助的答案进行投票。【参考方案2】:

你可以试试下面的sn-p,基本上你需要使用DELIMITER否则mysql会从第一个;开始处理。此外,您不能在触发器中使用 select 语句,您应该始终使用 select into,最后我认为您的 if 语句没有按预期工作,它总是返回 1。

   DELIMITER $$
CREATE TRIGGER `create_account` AFTER INSERT ON `Client` FOR EACH ROW BEGIN
      SELECT C.idClient into @lastID FROM Client as C ORDER BY C.idClient DESC LIMIT 1;
      SELECT 'FR1330010000019111679074293' into @iban;

      SELECT IF(
               LENGTH(@iban) < 11,
               CONCAT(
                       REPEAT('0', (11 - LENGTH(@iban))),
                       @iban
                   ),
               @iban = @iban
           ) into @iban;

      INSERT INTO `Compte`(`idCompte`,
                        `numeroCompte`,
                        `soldeCompte`,
                        `idClientCompte`,
                        `statusCompte`)
      VALUES (NULL, @iban, '0', @lastId, '0');

END$$
DELIMITER ;

【讨论】:

【参考方案3】:

没有引用 newINSERT 触发器非常可疑。

您的问题应该解释您要实现的逻辑,但我认为是:

CREATE TRIGGER `reate_account
    AFTER INSERT ON Client
    FOR EACH ROW
BEGIN
    SET @iban = 'FR1330010000019111679074293';

    INSERT INTO Compte (numeroCompte, soldeCompte, idClientCompte, statusCompte)
        SELECT LPAD(@iban, 11, '0'), '0', new.idClient, '0'
        FROM DUAL
        WHERE LENGTH(@iban) < 11;
END;

您的触发器比必要的复杂得多。

【讨论】:

是的,我已经添加了 @lastId 的 new.idClient insted ...但是在这里发布了我的代码之后。但好点,谢谢! @FrenchyCoder 。 . .我很惊讶你不接受这个答案。对于您的问题,这是一个更简单的解决方案。

以上是关于SQL:我的查询中出现错误 1064,我找不到原因的主要内容,如果未能解决你的问题,请参考以下文章

正向工程 MySQL 工作台错误 1064

即使创建表的语法正确,我的 sql 中也会出现错误 1064

MariaDB变快了,我找不到原因?

创建具有货币类型的表在 sql 中出现此错误:ERROR 1064 (42000) [重复]

SQL ALTER TABLE ADD PRIMARY KEY 错误 1064

MariaDB 未知语法错误。制作一个简单的表格[重复]