在另一个表上插入值后的MySQL触发器

时间:2016-02-17 03:43:48

标签: mysql database triggers insert

我的桌子上有我的手机联系人列表,这是联系人表的结构。

enter image description here

另一个是 smartteleco 表。

enter image description here

smartteleco 表的 ContactId 联系人 ContactId 的外键。

我正在创建一个触发器,如果​​我 INSERT 到联系人表中, ContactNumber1值从0918,0919,0920开始, 0921 它将存储在 smartteleco 表的 CellNumber 字段中。

这些是我已经尝试过的触发器,但是语法错误,错误总是在 IF STATEMENT 中。

CREATE TRIGGER addSmart
    AFTER INSERT ON contacts
        FOR EACH ROW
        BEGIN
             IF(substring(ContactNumber1,1,4) IN (0918,0919,0920,0921) = 1)
                SET CellNumber = substring(ContactNumber1,1,11);
             END IF;
        END



CREATE TRIGGER addSmart
    AFTER INSERT ON contacts
        FOR EACH ROW
        BEGIN
             IF(substring(ContactNumber1,1,4) IN (0918,0919,0920,0921) = 1)
                INSERT INTO smartteleco (CellNumber) VALUES (ContactNumber1);
             END IF;
        END



CREATE TRIGGER addSmart
        AFTER INSERT ON contacts
            FOR EACH ROW
            BEGIN
                 IF(substring(ContactNumber1,1,4) IN (0918,0919,0920,0921) = 1)
                    INSERT INTO smartteleco (NEW.CellNumber) VALUES (NEW.ContactNumber1);
                 END IF;
            END


CREATE TRIGGER addSmart
    AFTER INSERT ON contacts
        FOR EACH ROW
        BEGIN
             IF(substring(ContactNumber1,1,4) IN (0918,0919,0920,0921) = 1)
                SET CellNumber = ContactNumber1;
             END IF;
        END



  CREATE TRIGGER addSmart
    AFTER INSERT ON contacts
        FOR EACH ROW
        BEGIN
             IF(substring(ContactNumber1,1,4) IN (0918,0919,0920,0921) = 1)
                SET NEW.CellNumber = NEW.ContactNumber1;
             END IF;
        END

2 个答案:

答案 0 :(得分:0)

行触发器无法直接访问与其连接的表的列。 可以使用伪记录 NEW 访问新插入记录中的值。要使您的触发器有效,只需将ContactNumber1的引用替换为对NEW.ContactNumber1的引用。

您还需要为IF结构使用正确的语法,即

IF <contition> THEN  --< You need this keyword
  <statement>
END IF;

您可能还需要将ContactNumber1投射为CHAR以使用substring()

所以正确的触发语法应该是

CREATE TRIGGER addSmart
  AFTER INSERT ON contacts
  FOR EACH ROW
BEGIN
  IF(substring(CAST(NEW.ContactNumber1 AS CHAR(11)), 1, 4) IN ('0918', '0919', '0920' ,'0921'))
  THEN
    INSERT INTO smartteleco (ContactId, CellNumber)
      VALUES (NEW.ContactId, NEW.ContactNumber1);
  END IF;
END

编辑:语法已更正。我还发现您需要将ContactNumber1列从INT(11)更改为CHAR(11),这实际上是首选数据类型,因为您永远不会对电话号码执行算术运算。

答案 1 :(得分:0)

试试这个:

    BEGIN
         IF SUBSTRING(NEW.ContactNumber1,1,4) IN ('0918','0919','0920','0921') THEN
             INSERT INTO smartteleco (CellNumber) VALUES (NEW.ContactNumber1);
         END IF;
    END