【问题标题】:Populate a table with random set of rows from another table on insert using a trigger使用触发器在插入时使用来自另一个表的随机行集填充一个表
【发布时间】:2013-06-04 13:05:17
【问题描述】:

我遇到了这个问题。 我有一个带有这些表的 mysql 数据库:

USERS(Cod,Interests)
SURVEY(Cod,Target_Interests)
USERS_OF_A_SURVEY(CodSurvey,CodUser)

Interests 具有相同的 Target_Interests 值集。

我想在我的数据库中有一个触发器,在 SURVEY 上的 insert 之后,以这种方式在 USERS_OF_A_SURVEY 上放置 1000 个条目:

例如:我在 SURVEY 中输入了值 SURV001,MUSIC

现在触发器应该在 USERS_OF_A_SURVEY 上添加 1000 个条目,CodSurvey 固定在 SURV001,并从 Interests = MUSIC 的用户中随机添加 CodUser

不知道我是否正确解释了我的问题,我希望是的。帮帮我!

谢谢

【问题讨论】:

    标签: mysql select triggers insert


    【解决方案1】:

    你在找这个吗?

    CREATE TRIGGER tg_survey_after_insert
    AFTER INSERT ON survey
    FOR EACH ROW 
      INSERT INTO users_of_a_survey (codsurvey, coduser)
      SELECT NEW.cod, cod
        FROM users
       WHERE interests = NEW.target_interests
       ORDER BY RAND()
       LIMIT 1000
    ;
    

    插入几行

    INSERT INTO survey VALUES('SURV001', 'music');
    INSERT INTO survey VALUES('SURV002', 'music');
    

    插入后users_of_a_survey的内容

    |调查问卷 |密码用户 | ---------------------- | SURV001 | 3 | | SURV001 | 1 | ..................... | SURV002 | 1 | | SURV002 | 4 | ……………………………………………………………………………………………………………………

    这里是 SQLFiddle 演示。

    更新

    如果我想反其道而行之?删除所有用户 “users_of_a_survey”当我删除他们的调查?

    您可以使用BEFORE DELETE 触发器或FOREIGN KEY ... ON DELETE CASCADE

    触发器可能看起来像

    CREATE TRIGGER tg_survey_after_delete
    BEFORE DELETE ON survey
    FOR EACH ROW 
      DELETE FROM users_of_a_survey 
       WHERE codsurvey = OLD.cod
    ;
    

    这里是 SQLFiddle 演示。

    【讨论】:

    • 如果我想反其道而行之?当我删除他们的调查时,从“users_of_a_survey”中删除所有用户?示例:我删除了 SURV1,我想使用 CodSurvey = SURV1 删除“users_of_a_survey”的所有条目
    • @FrancescoTronca 查看更新后的答案。你可以考虑投票:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多