vscode 상에서 mysql과 연결 시킨 뒤 

 

test라는 테이블을 만들고 테이블안에 컬럼을 t1이라 정함.

 

특정 함수가 실행 되었을때 test 테이블 안에 있는 t1컬럼의 value가 1이든 원하는 만큼 증가시켜야함.

 

test 테이블 조건

id : 값

t1 : 증감 시켜줄 컬럼

 

처음 시도했던 방법

const { Test } = require("../models");


const T = async (id) => {
	await Test.update(
    {
    	where: {id}
    },
    {
    	t1: t1 + 1	
    })
}

우선 Test 테이블을 연결해주고 T 라는 함수가 실행될때 id 를 받아와

 

update메서드를 통해 where 로 받아온 id와 일치한 놈을 찾아줌.

 

찾은놈의 t1 을 기존의 t1 + 1 하여 저장.

 

물론 실패했다.

 

update메서드의 경우 where절을 뒤에 쓰고 update해줄 부분을 먼저 써야한다함.

 

const { Test } = require("../models");


const T = async (id) => {
	await Test.update(
    {
    	t1: t1 + 1	
    },
    {
    	where: {id}
    },
    )
}

이렇게 바꿨지만 역시 실패..

 

t1에 더해 주는 방식이 잘못 되었나 싶어 다시 수정

(계속 써야하니 짧게 요약해서 보여주겠음)

	await Test.update(
    {
    	t1:  +1	
    },

이 역시나 실패..

일단 t1의 값이 바뀌는건 맞으니 update는 맞을거라 확신함...

(이게 문제였지만;)

 

찾아보니 sequelize에서 증감 update를 할때 increment 를 쓴다는 걸 찾음.

바로 대입 ㄱㄱ

{
	increment:(t1:1)	
}

{
  	increment:{t1:1}	
}

{
  	increment:{t1:1}	
}

{
  	increment:[t1:1]	
}

.. //

문법이 잘못된 건가 요상하게 계속 바꿔 봤지만 절대 되지않았음..

( 문법이 잘못된 건 맞지만 대충 뭔말알?)

애초에 이런식으로 실행하면 터미널창에 raw 쿼리가 update로 실행이 되는게 아니라 select로 실행되는 걸 늦게 발견함..

뭔가 잘못접근 한거 같아 다시 찾아보니 increment 라는 메서드 자체가 있는 거 였음..

 

const { Test } = require("../models");


const T = async (id) => {
	await Test.increment(
    {
    	t1: 1
    },
    {
    	where: {id}
    },
    )
}

update 메서드를 increment로 바꿔 주니 아주 잘됨..

 

여기선 1을 예시로 들었지만 2,3,4,5,.. 다 가능함

 

그리고 받아온 값도 가능

 

예를 들어

 

const { Test } = require("../models");

const a = 5

const T = async (id) => {
	await Test.increment(
    {
    	t1: a 
        // t1에 5를 더함
    },
    {
    	where: {id}
    },
    )
}

이상 이거때문에 많은 시간을 허비했지만 이제라도 알게 되었으니 만족..

'Sequelize' 카테고리의 다른 글

Sequelize 쓰는 이유  (0) 2024.02.15
sequelize - 일괄 등록,수정 ( bulkCreate bulk update )  (0) 2023.08.09
sequelize include 모델 order  (0) 2023.08.08
squelize.sync  (0) 2023.07.25