Есть ли способ переупорядочить связанные таблицы в MySQL? - PullRequest
0 голосов
/ 24 февраля 2020

Мне нужно «заархивировать» данные из 2-х связанных таблиц, чтобы анонимизировать данные клиентов.

Для этого я сделаю INSERT....SELECT из TABLE1 и TABLE2 в две другие идентичные таблицы : TABLE1_anonymous, TABLE2_anonymous.

Первичный ключ TABLE1 изменится с автоинкрементом, но как насчет TABLE2? Я потеряю отношения.

Есть ли известный способ сделать это?

Моя единственная идея - избежать автоинкремента, сначала оставить исходный идентификатор, а после запустить обновление на обоих таблицы со случайным идентификатором ...

1 Ответ

1 голос
/ 24 февраля 2020

Вам нужно что-то вроде

INSERT INTO TABLE1_anonymous (fields except id)
SELECT (fields except id)
FROM TABLE1;

INSERT INTO TABLE2_anonymous (fields except id and table1_id), table1_id
SELECT (fields from TABLE2 except id and table1_id),       
       TABLE1_anonymous.id
FROM TABLE1
JOIN TABLE1_anonymous USING (fields except id)
JOIN TABLE2 ON TABLE1.id = TABLE2.table1_id;

Соединения в последнем запросе позволяют вам заменить значение id в исходной таблице, на которое ссылается table1_id, новым назначенным значением auto_incremented id из копия анонимной таблицы.


В качестве альтернативы вы можете изменить структуру анонимной таблицы, добавить поле old_id, вставить в нее значения id во время копирования, затем восстановить целостность ссылок, используя эти значения, и, наконец, удалить эти поля .

...