【问题标题】:insert trigger error #1064 sql person_info and Total_bank插入触发器错误 #1064 sql person_info 和 Total_bank
【发布时间】:2020-12-20 13:39:52
【问题描述】:

我想做一个查询,将其他表中的数据填充到另一个表中。

INSERT INTO `Total_bank` VALUES (
 SELECT id,name FROM person_info WHERE name=
     (SELECT name FROM person_info WHERE personid=
      (SELECT MAX(personid) FROM person_info))
);

它给了我以下错误:

#1064 在第 2 行

表person_info:

表 Total_bank:

【问题讨论】:

  • 请解释您要做什么。样本数据和期望的结果会有所帮助。

标签: mysql sql innodb mysql-error-1064


【解决方案1】:

如果要在person_info 中插入最大值为personid 的行,则使用ORDER BYLIMIT

INSERT INTO Total_bank (id, name)
     SELECT id, name
     FROM person_info
     ORDER BY personid DESC
     LIMTI 1;

请注意,您应该列出要插入的列。

说了这么多。您问题的标题表明您正试图在触发器中执行此操作。 这是非常危险的代码。。我怀疑有更好的方法来做任何你想做的事情。您应该提出一个问题,提供样本数据、期望的结果以及对您想要做什么的清晰解释。但是,以上内容确实回答了您在此处提出的问题。

【讨论】:

  • 值得一提的是,危险来自SELECT MAX(autoincrementing_id) FROM table 模式,它几乎肯定会出现竞争条件并因此出错,但只有在您完成测试并将其投入生产之后。跨度>
  • 我用 php 制作了一个 discord 机器人,并且我已经保存了每个用户的数据,所以我基本上想要做的是将 discord id 与我保存的数据链接起来。对于这个 Total_bank,我只想做一个不做太多的插入,它只会在新的不和谐 id 被引入 person_info 时发生。稍后我将不得不创建一个更新触发器以将每个数据字段的食物添加到 Tfood(Totalfood) 中。感谢您的快速回复,效果非常好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2012-02-20
  • 2015-11-09
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多