Как сделать SCD в MySQL - PullRequest
       45

Как сделать SCD в MySQL

0 голосов
/ 13 марта 2019

Я хочу выполнить SCD-процесс в MySQL, у меня есть две таблицы, которые абсолютно одинаковы, table1 всегда усекается и имеет только новую запись.Таблица2 получает запись из таблицы1 и поддерживает историю.В моем сценарии, если существующие данные поступают в таблицу1, я хочу перезаписать в таблице2, а если новая запись появляется в таблице1, я хочу вставить в качестве новой записи в таблицу2.

create table table1(id int, name varchar(2),title varchar(10));
create table table2(id int, name varchar(2),title varchar(10));

Это мой пример структуры таблицы выше,Если таблица содержит значение типа (1, a, хоккей), то я просто хочу вставить эти данные в table2, тогда table1 будет усечен.Если я снова вставлю запись в table2 с тем же Id, но заголовок может измениться. В этом сценарии я хочу перезаписать данные в table2. Если появится какой-либо новый Id, он будет вставлен как новая строка в table2.Пожалуйста, объясните, как сделать этот сценарий?

1 Ответ

1 голос
/ 13 марта 2019

Вы делаете это в пять шагов:

  1. Запустить транзакцию базы данных.

  2. Выберите строку из table1 в переменные id2, name2 и title2.

  3. Вставить или обновить table2, используя ON DUPLICATE KEY UPDATE:

    insert into table2 (id, name, title) values (id2, name2, title2)
      on duplicate key update
        name = name2,
        title = title2
    
  4. Удалить из table1. Не усекать. Усечение может привести к аннулированию транзакции.

  5. Совершить транзакцию.

...