【问题标题】:Mysql trigger ON INSERT + INNER JOIN syntax errorMysql 触发器 ON INSERT + INNER JOIN 语法错误
【发布时间】:2020-11-19 16:51:44
【问题描述】:

我有一个来自 uni 的任务,我需要模拟 Spotify 之类的东西(没有播放器)。
一些上下文:事情是我想创建一个触发器,以便在创建新播放列表时(表playlist 上的列),将创建者用户(userID)设置为它的第一个追随者。表followingPlaylist 是一个中间表,记录了哪个用户关注了哪个播放列表。最重要的是,帐户有两种类型,artistsusers(所以有表 accounts 保存帐户信息,usersartists 保存 accountIDuserIDartistID)。

我遇到的问题是 mysql 在这个查询中抛出了 sintax 错误,如果有人可以帮助我,我将非常感激。这是查询:

CREATE TRIGGER primer_seguidor ON playlists
FOR INSERT AS
    INSERT INTO followingPlaylist
    (accountID, playlistID)
    SELECT
    playlists.playlistID, users.accountID FROM playlists
    INNER JOIN usuers ON playlists.userID = users.userID;

【问题讨论】:

  • 样本数据和期望的结果确实有助于阐明您想要做什么。
  • MySQL 没有ON INSERT 触发器支持。请阅读User Manual 并研究触发事件列表。
  • mysql 在这个查询中抛出 sintax 错误 如果您报告语法错误,那么您必须直接发布未更改且未缩短的错误消息文本。
  • @Akina 很好,这部分是没有必要分配的,因为否则我会被搞砸,感谢您的输入。
  • 如果要将行插入到另一个链接表中,则必须使用 AFTER INSERT 触发器(即仅当插入已成功执行且没有错误时)。请注意,在 MySQL 中,触发器是基于行的,即它们处理每个单独的插入行,而不是复杂中的所有插入行(语法中的 FOR EACH ROW 关键字)。因此,对于插入到定义触发器的表中的值的引用,您不能使用表别名,而是使用新的单行伪表别名。

标签: mysql sql triggers syntax-error


【解决方案1】:
CREATE TRIGGER primer_seguidor 
AFTER INSERT
ON playlists
FOR EACH ROW
    INSERT INTO followingPlaylist (accountID, playlistID)
    SELECT NEW.playlistID, users.accountID 
    FROM users 
    WHERE NEW.userID = users.userID;

PS。仅语法更正,无逻辑检查。

PPS。 Modelling fiddle

【讨论】:

  • 谢谢,这正是我想要的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2015-01-30
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
相关资源
最近更新 更多