[TIL] 내가 만난 에러(ERROR 1832)

Soo·2023년 1월 22일
0

🔴 문제 발생

실전 프로젝트를 진행 하던 중에 DB의 어떤 테이블에 primary Key에 auto_increment를 설정하지 않아서 변경하는 과정에서 에러가 발생했다.
userId와 medicineId를 not null로 변경해주고 싶은데 계속 cannot change라고 한다.. 🤯

🟡 원인

에러를 구글링해보니 다른 테이블과의 관계를 통해 설정된 foreign key때문에 해당 컬럼을 변경할 수 없다는 것....

❓ 해결방안

설정된 foreign key를 잠시 제거하고, column의 속성 변경해주고, 다시 foreign key를 설정해줘야한다. 이때, 다른 세션에서 데이터에 접근할 수 없게 연관된 table들을 LOCK 해준 상태에서 진행해야한다.

구글링하다가 찾은 stackoverflow 사이트 : https://stackoverflow.com/questions/13606469/cannot-change-column-used-in-a-foreign-key-constraint

우선, 모든 선언은 동일한 세션에서 이루어져야 한다.

🔄 해결 과정

1. table에 lock 설정

LOCK TABLES table_name [READ | WRITE]

2. foreign key 해제

  • You can turn off foreign key checks:
SET FOREIGN_KEY_CHECKS = 0;

/* DO WHAT YOU NEED HERE */ 변경해야할 속성들을 변경

SET FOREIGN_KEY_CHECKS = 1;

3. 변경해야할 속성들을 변경
4. table에 걸린 lock 해제

UNLOCK TABLES;

and here's a tutorial like how to lock TABLES and unlock TABLES!:
https://www.mysqltutorial.org/mysql-table-locking/

🟢 RESOLVED!

MySQL DB를 깡으로 터미널에서 만들었는데 어제는 사실.. 테이블 하나 보는 것도 엄청 오래걸렸는데.. 오늘은 진행 속도가 예전에 비해 빨라지고 터미널로도 익숙해지고 있어서 기분이가 조금 좋다 🤭

profile
Soogineer's Devlog

0개의 댓글