我想在 TABLE1 上插入新行后创建触发器,并在更新 table1 时创建更新触发器。
我有两张 table 。
插入 table1 信息后,我想触发将一些数据复制到 table2 上的新行。 (在这种情况下,F和G将为空,并且id2自动递增。)
id1、A、B、C、D、E = 是 table1 列。 id2、id1、C、E、F、G = 是 table2 列。 id1和id2是每个表的主键
表1(id1,A,B,C,D,E)
表2(id2,id1,C,F,G)
CREATE TABLE Table1(id1 INT, A VARCHAR(10), B VARCHAR(10), C date), D VARCHAR(10), E VARCHAR(10));
CREATE TABLE Table2(id2 INT, C2 date, F VARCHAR(10), G VARCHAR(10));
GO
CREATE TRIGGER Table1_AfterInsert
AFTER INSERT ON Table1
FOR EACH ROW BEGIN
UPDATE Table2
SET C2 = NEW.C
WHERE id1 = NEW.id2;
END;
GO
INSERT INTO Table2(id2, F,G)VALUES(1,'111','red');
INSERT INTO Table2(id2, F,G)VALUES(2,'222','blue');
INSERT INTO Table2(id2, F,G)VALUES(3,'333','red');
GO
INSERT INTO Table1(id1, C)VALUES(1,'AAA'),(2,'BBB');
GO
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
GO
CREATE TRIGGER Table1_AfterUpdate
AFTER UPDATE ON Table1
FOR EACH ROW BEGIN
IF (OLD.C != NEW.C2)
THEN
UPDATE Table2
SET C2 = NEW.C
WHERE id2 = NEW.id1;
END IF;
END;
GO
UPDATE TableA
目前,如果我删除每一行,我会将所有行复制到 table2 中。 当我尝试为每一行添加然后收到错误时。
这是我的真实表,我接近第 7 行错误 #1064 SINTAX
CREATE TABLE man_value(id (PK), nome_documento VARCHAR(10), descricao VARCHAR(10), data_fim date, data_inicio date, color VARCHAR(10), quem_fim VARCHAR(10), quem_inicio VARCHAR(10));
CREATE TABLE calendar(id (PK),id_man INT, end_date date, tiltle VARCHAR(10), description VARCHAR(10), color VARCHAR(10), created_by VARCHAR(10), create_at (datetime));
------------------------------------------------------------------------------------------- THIS ONE IS WORKING OK
DELIMITER $$
CREATE TRIGGER man_value_calendar_AfterInsert
AFTER INSERT ON man_value
FOR EACH ROW BEGIN
INSERT INTO calendar (id_man, title, end_date, description, color,create_by)
VALUES (NEW.id, NEW.nome_documento, NEW.data_fim,NEW.descricao, '#FFD700',NEW.quem_fim);
END$$
DELIMITER ;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- NO ERROR BUT DOES NOTHING
DELIMITER $$
CREATE TRIGGER man_value_calendar_AfterUpdate
AFTER UPDATE ON man_value
FOR EACH ROW BEGIN
IF (OLD.id = NEW.id)
THEN
UPDATE calendar
SET id_man=NEW.id, title = NEW.nome_documento, end_date=NEW.data_fim, description=NEW.descricao, color='#FFD700', create_by=NEW.quem_fim
WHERE id_man = NEW.id;
END IF;
END$$
DELIMITER ;
最佳答案
已解决
创建表 man_value(id (PK)、nome_documento VARCHAR(10)、descricao VARCHAR(10)、data_fim 日期、data_inicio 日期、颜色 VARCHAR(10)、quem_fim VARCHAR(10)、quem_inicio VARCHAR(10));
CREATE TABLE calendar(id (PK),id_man INT, end_date date, tiltle VARCHAR(10), description VARCHAR(10), color VARCHAR(10), created_by VARCHAR(10), create_at (datetime));
---------------------------------
DELIMITER $$
CREATE TRIGGER man_value_calendar_AfterInsert
AFTER INSERT ON man_value
FOR EACH ROW BEGIN
INSERT INTO calendar (id_man, title, end_date, description, color,create_by)
VALUES (NEW.id, NEW.nome_documento, NEW.data_fim,NEW.descricao, '#FFD700',NEW.quem_fim);
END$$
DELIMITER ;
-- -- -- -- -- -- -- -- --
DELIMITER $$
CREATE TRIGGER man_value_calendar_AfterUpdate
AFTER UPDATE ON man_value
FOR EACH ROW BEGIN
IF (OLD.id = NEW.id)
THEN
UPDATE calendar
SET id_man=NEW.id, title = NEW.nome_documento, end_date=NEW.data_fim, description=NEW.descricao, color='#FFD700', create_by=NEW.quem_fim
WHERE id_man = NEW.id;
END IF;
END$$
DELIMITER ;
关于插入新行后mysql触发器table1复制到table2选定的字段而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55146765/