mySql触发器无法正常工作

时间:2018-01-01 16:02:14

标签: mysql

我有2个表设置了一个触发器,这样在一个表上插入,将触发第二个表的列在同一个主键上的增量(因为两个表都由一个外键链接),但是此时增量只有一次,然后它不会增加任何后续插入。我的想法是,它可能与我设置钥匙的方式有关,但我不确定,有人可以对此有所了解:

CREATE TABLE Members(
    ID  INT  UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
    FIRST_NAME  TEXT(16),
    LAST_NAME  TEXT(16),
    TITLE  TEXT(7), /** 7 CHARS for  'Student'*/
    INSTITUTION  VARCHAR(2048),
    No_Publications INT NOT NULL,
    PRIMARY KEY(ID)
  );

CREATE TABLE Papers(
    ISBN  INT UNSIGNED NOT NULL UNIQUE,
    Title  TEXT(4),
    Publish_Date  DATE NOT NULL,
    Topic  TEXT(128),
    PRIMARY KEY(ISBN)
  );

CREATE TABLE Publications(
    Author_ID  INT  UNSIGNED NOT NULL UNIQUE,
    ISBN  INT UNSIGNED NOT NULL UNIQUE,
    PRIMARY KEY (Author_ID, ISBN),
    FOREIGN KEY(Author_ID) REFERENCES Members(ID) ON DELETE RESTRICT ON UPDATE CASCADE,
    FOREIGN KEY(ISBN) REFERENCES Papers(ISBN) ON DELETE RESTRICT ON UPDATE CASCADE /**Used in
    many to many relations*/
  );

  CREATE TRIGGER New_Publication AFTER INSERT ON Publications
  FOR EACH ROW
  UPDATE Members SET No_Publications = No_Publications + 1
  WHERE Members.ID = Publications.Author_ID;

编辑:我希望No_Publications随着在publication表上的插入而增加

编辑2:实施NEW关键字后,自动增量现在可以正常工作,但现在会发生以下情况:

在向一个新成员添加1张新论文后,该论文已在数据库中注册,但是,随后在同一成员中添加的论文未登记,尽管成员表中已经增加了。

由于上面附有透明度的论文表格,因此插入刊物表格。

1 个答案:

答案 0 :(得分:0)

触发器应为:

CREATE TRIGGER New_Publication AFTER INSERT ON Publications 
FOR EACH ROW 
UPDATE Members SET No_Publications = No_Publications + 1 
WHERE Members.ID = NEW.Author_ID;

即使他的列也应该在删除时更新,并且此列再次进行database normalization,因为您可以在不使用列的情况下获取此信息,因此仅在某些情况下才能提高性能并避免计数。