【问题标题】:how to have to insert in a trigger如何必须插入触发器
【发布时间】:2013-12-24 13:20:42
【问题描述】:
 drop trigger if exists testtTrigger;

    CREATE TRIGGER testtTrigger after INSERT ON temp
      FOR EACH ROW 
        INSERT INTO author 
        (AuthorID, AuthorFname, AuthorLname) values (new.aID, new.afname, new.alname) 

        INSERT INTO book 
        (`Book ID`, book_Title) values (new.bID, new.btitle);

//也有人告诉我在存储过程中运行此代码,但是当我在存储过程中运行它时,它运行没有任何问题,但它不会为我触发,根本不会对我来说,存储过程代码如下

DELIMITER $$

CREATE TRIGGER testtTrigger BEFORE INSERT ON temp
  FOR EACH ROW BEGIN
    INSERT INTO author (AuthorID, AuthorFname, AuthorLname) values (new.aID, new.afname, new.alname);
    INSERT INTO book (`Book ID`, book_Title) values (new.bID, new.btitle);
  END;

【问题讨论】:

  • 你的临时表是临时表吗?我认为你不能在临时表上创建触发器。
  • 我命名为 temp 的意思是“临时”,但实际上该表一直存在并且它不是临时的,我只是命名为 temp 以便与我需要它们的实际表区分开来
  • SQL 只是 结构化查询语言 - 许多数据库系统使用的语言,但不是数据库产品...触发器之类的东西高度特定于供应商 - 所以我们真的需要知道您正在使用什么数据库系统(以及哪个版本)(请相应地更新标签) ....
  • 我使用的是mysql server 5.6
  • 这是我第一次在堆栈溢出中询问,抱歉,错误和不便。

标签: mysql sql stored-procedures triggers


【解决方案1】:
drop trigger if exists testtTrigger;

DELIMITER //   
CREATE TRIGGER testtTrigger after INSERT ON temp
  FOR EACH ROW 
  BEGIN
    INSERT INTO author(AuthorID, AuthorFname, AuthorLname) values (new.aID, new.afname, new.alname); 
    INSERT INTO book 
    (`Book ID`, book_Title) values (new.bID, new.btitle);
  END; //
  DELIMITER;

顺便说一句,这应该使用外键和CASCADE 选项来完成。

【讨论】:

  • 我怎样才能通过使用外键和 CASCADE 选项来做到这一点。因为它已经是多对多的关系,它就像 ((author) (book), (author_Book), (temp) ) 只是我想变成这样:当我填充临时表时,数据库会自动为我填充其他表。感谢您的回复
猜你喜欢
  • 2011-03-08
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
  • 2016-10-13
  • 1970-01-01
相关资源
最近更新 更多