Я попытался сделать то же самое, что вы упомянули, но он заменяет и вставляет на основе созданного ограничения (ограничение двух столбцов) Созданного ограничения для идентификатора и имени.
Сначала я создал таблицу:
CREATE TABLE Sakila.ReplacePrac (
Studentid INT(6) ,
Firstname VARCHAR(20),
Lastname VARCHAR(30) ,
Gender CHAR(1),
Primary key(Studentid, Firstname)) ;
insert into ReplacePrac
select 1, 'Rob', 'Stark', 'M' union all
select 1, 'Ben', 'Stark', 'M' union all
select 2, 'Arya', 'Stark', 'F' union all
select 2, 'Tyrian', 'Lan', 'M' ;
В настоящее время таблица содержит следующие данные:
# Studentid, Firstname, Lastname, Gender
1, Ben, Stark, M
1, Rob, Stark, M
2, Arya, Stark, F
2, Tyrian, Lan, M
Я добавил Заменить в предложение, и я думаю, что он заменяет всякий раз, когда ID иИмя совпадает и вставляется всякий раз, когда оно не совпадает (то есть это условие «И», а не «ИЛИ»)
Replace into Replaceprac (StudentID, Firstname, Lastname, Gender)
Values('1', 'Jon', 'Snow', 'M'),
('1', 'Ben', 'Snow', 'M'),
('2', 'Sansa', 'Startk', 'F'),
('2', 'Tyrian', 'Ster', 'M')
Оно заменяется всякий раз, когда оно получает совпадение между ИД и именем, и вставляется, когда оно когда-либо идентифицируется илиимя не совпадает.Если вы видите, он заменил Бен Старт на Бен Сноу, Тириан Лан на Тириан Стер и вставил для Джона и Сансы, даже если ID уже существовал.
# Studentid, Firstname, Lastname, Gender
1, Ben, Snow, M
1, Jon, Snow, M
1, Rob, Stark, M
2, Arya, Stark, F
2, Sansa, Startk, F
2, Tyrian, Ster, M