티스토리 뷰
반응형
insert + update를 합친 upsert를 사용하기 위해 아래와 같이 진행했다.
1. unique index 지정
: PK를 사용하여 upsert를 진행하려는 것이 아니기 때문에 원하는 컬럼 조합으로 index를 생성
추가 예) phoneNumber와 nickname을 합쳐 하나의 unique index로 사용
User.init({
userId: {
type: DataTypes.BIGINT.UNSIGNED,
primaryKey: true,
autoIncrement: true,
},
phoneNumber: {
type: DataTypes.STRING,
},
nickname: {
type: DataTypes.STRING,
},
point: {
type: DataTypes.INTEGER,
}
}, {
indexes: [
{
unique: true,
fields: ['phoneNumber', 'nickname']
}
]
})
2. upsert 진행
// 전달받은 request 값 (임의)
let param = request.param;
let [user, created] = await USER.upsert({
phoneNumber: param.phoneNumber,
nickname: param.nickname,
point: param.point,
})
이렇게 upsert를 진행하면 다음과 같은 쿼리가 나온다.
INSERT INTO `user` (`phoneNumber`,`nickname`,`point`,`createdAt`)
VALUES (?,?,?,?)
ON DUPLICATE KEY UPDATE
`phoneNumber`=VALUES(`phoneNumber`),
`nickname`=VALUES(`nickname`),
`point`=VALUES(`point`);
3. 동작 내용
: 위 쿼리 내용 중 "ON DUPLICATE KEY UPDATE"는 데이터를 insert 했을 때, PK 혹은 UNIQUE KEY가 중복될 경우 지정 데이터만 update 하는 명령어이다. (물론 중복되지 않으면 insert가 실행되게 된다.)
현재 예시 내용을 가지고 보면 phoneNumber와 nickname이 함께 unique index로 사용되기 때문에 해당 로우의 point 컬럼 값만 전달받은 데이터로 update 되게 된다.
반응형
'개발 일지' 카테고리의 다른 글
javascript csv 파일 생성 및 다운로드 예제 (0) | 2022.07.12 |
---|---|
javascript csv file 읽기 (0) | 2022.07.12 |
RDS 파라미터 그룹 이슈로 네이버 로그인 안됨 (0) | 2022.05.07 |
다양한 환경에서 AWS - EC2, RDS 접속 (랜 선, 랜 허브, 와이파이, 핫스팟) (0) | 2022.05.07 |
AWS RDS 연결 시 DB Name 입력 (2) | 2022.05.07 |