반응형
단일 쿼리에서 여러 행 삽입을위한 MySQL ON DUPLICATE KEY UPDATE
단일 쿼리에 여러 행을 삽입하려는 SQL 쿼리가 있습니다. 그래서 나는 다음과 같은 것을 사용했다 :
$sql = "INSERT INTO beautiful (name, age)
VALUES
('Helen', 24),
('Katrina', 21),
('Samia', 22),
('Hui Ling', 25),
('Yumie', 29)";
mysql_query( $sql, $conn );
문제는이 쿼리를 실행할 때 위와 같은 UNIQUE
키 ( PRIMARY KEY
예 : 가 아닌 ) 를 확인 해야하는지 'name'
확인하고 'name'
이미 존재하는 경우 해당 전체 행을 다르게 삽입하여 업데이트해야한다는 것입니다.
예를 들어, 아래 예 'Katrina'
에서 데이터베이스에 이미있는 경우 필드 수에 관계없이 전체 행을 업데이트해야합니다. 다시 'Samia'
나타나지 않으면 행을 삽입해야합니다.
나는 다음을 사용하려고 생각했다.
INSERT INTO beautiful (name, age)
VALUES
('Helen', 24),
('Katrina', 21),
('Samia', 22),
('Hui Ling', 25),
('Yumie', 29) ON DUPLICATE KEY UPDATE
함정입니다. 진행 방법에 대해 혼란스러워했습니다. 한 번에 여러 행을 삽입 / 업데이트 할 수 있습니다. 방향을 알려주십시오. 감사.
VALUES
새로운 값을 참조 하려면 키워드 를 사용 하십시오 ( 문서 참조 ).
INSERT INTO beautiful (name, age)
VALUES
('Helen', 24),
('Katrina', 21),
('Samia', 22),
('Hui Ling', 25),
('Yumie', 29)
ON DUPLICATE KEY UPDATE
age = VALUES(age),
...
INSERT INTO ... ON 중복 키 업데이트는 SQL Server가 아닌 MYSQL에 대해서만 작동합니다.
SQL Server의 경우이 문제를 해결하는 방법은 먼저 임시 테이블을 선언하고 해당 임시 테이블에 값을 삽입 한 다음 MERGE를 사용하는 것입니다.
이처럼 :
declare @Source table
(
name varchar(30),
age decimal(23,0)
)
insert into @Source VALUES
('Helen', 24),
('Katrina', 21),
('Samia', 22),
('Hui Ling', 25),
('Yumie', 29);
MERGE beautiful AS Tg
using @source as Sc
on tg.namet=sc.name
when matched then update
set tg.age=sc.age
when not matched then
insert (name, age) VALUES
(SC.name, sc.age);
INSERT ... ON DUPLICATE KEY UPDATE 대신 Replace 를 사용할 수 있습니다 .
반응형
'Programing' 카테고리의 다른 글
한 필드의 날짜와 다른 필드의 시간을 결합하는 방법-MS SQL Server (0) | 2020.05.15 |
---|---|
문자열에서 선행 쉼표 제거 (0) | 2020.05.15 |
Ruby에서 a와 b 사이의 난수를 생성하는 방법은 무엇입니까? (0) | 2020.05.15 |
JavaScript 번호에서 소수 부분을 제거하려면 어떻게해야합니까? (0) | 2020.05.15 |
시스템에 설치된 TensorFlow 버전을 찾는 방법은 무엇입니까? (0) | 2020.05.15 |