#mysql
#mysql
Вопрос:
У меня есть две таблицы :
Таблица MST:
ID (PK INT)
Content (Varchar255)
NAME (Varchar255)
Таблица STG:
ID (INT) * not Primary Key
Content (Varchar255)
NAME (Varchar255)
Тогда как я могу вставить данные из STG в таблицу MST, если в ID есть дубликат, я обновлю остальные столбцы или вставлю новые строки.
Комментарии:
1. Проверка дубликатов ключей применяется ТОЛЬКО к целевой таблице.
Ответ №1:
Не имеет значения, имеет ли источник PK / UNIQUE . Каждая отдельная вставка выполняет отдельную и независимую проверку только для целевой таблицы.
Но у вас должен быть определенный порядок исходных данных — от этого зависит результат.
ДЕМОНСТРАЦИОННАЯ скрипка — разный порядок приводит к другому результату.
Ответ №2:
У меня есть метод, в котором вы можете вставлять данные в MTG, но дубликат ID
не будет вставлен в MTG
Сначала мы создаем таблицу
create table MTG like STG;
Это создаст таблицу, подобную STG, но не будет вставлять в нее записи.
Помните, что только столбцы, их атрибуты и ограничения копируются с помощью like
предложения using .
desc MTG;
--------- -------------- ------ ----- --------- -------
| Field | Type | Null | Key | Default | Extra |
--------- -------------- ------ ----- --------- -------
| ID | int | YES | | NULL | |
| content | varchar(225) | YES | | NULL | |
| Name | varchar(225) | YES | | NULL | |
--------- -------------- ------ ----- --------- -------
Затем мы модифицируем MTG
столбец ID
, чтобы сделать его primary key
alter table MTG modify id int primary key;
Я вставил некоторые поддельные данные в STG, которые похожи:
select * from STG;
------ --------- ---------
| ID | content | Name |
------ --------- ---------
| 1 | FUN | Swap |
| 1 | Vines | Swapnil |
| 2 | dint | Raj |
------ --------- ---------
Как только мы запустим запрос ниже
insert ignore into MTG select * from STG;
Он будет игнорировать повторяющиеся записи.
как вы можете видеть
---- --------- ------
| id | content | Name |
---- --------- ------
| 1 | FUN | Swap |
| 2 | dint | Raj |
---- --------- ------