我的桌子上有我的手机联系人列表,这是联系人表的结构。
另一个是 smartteleco 表。
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
答案 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