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