триггер mysql после вставки новой строки table1 копировать в table2 выбранные поля без дубликатов

0

Я хочу создать триггер после вставки новой строки в TABLE1 и триггер для обновления при обновлении table1.

У меня есть 2 таблицы.

После того, как я вставлю информацию в table1, я хочу запустить копирование некоторых данных в новую строку в table2. (В этом случае F и G будут нулевыми, а id2 будет автоматически увеличиваться.)

id1, A, B, C, D, E = - столбцы таблицы1. id2, id1, C, E, F, G = являются столбцами таблицы 2. 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 СИНТАКС

  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 ;
  • 0
    В чем ошибка?
  • 0
    Не проверено, но я верю, что это будет что-то вроде этого. Я спрашиваю, потому что я никогда не делал этого раньше, поэтому не уверен, что есть легче, чем лучше. Предыдущий код, который я пробовал, скопировал все строки таблицы вместо вставленной новой строки.
Показать ещё 1 комментарий
Теги:
codeigniter
phpmyadmin
triggers

1 ответ

0

РЕШИТЬ

CREATE TABLE 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 ;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню