[TIL] 191225 - SQL

Jiwon Yang·2019년 12월 25일
0

saveUser 하면서 계속 2가지 에러가 떴다. 거의 1시간 넘게 삽질했다.

첫번쨰는 내가 parameter 값을 변경하고 나서 {id} 가 아닌 {kakao_id}로 바꿔야 했는데 바꾸지 않은 바보짓

두번쨰는 계속 created_at 과 updated_at 이 parameter 값으로 전송되지 않는 현상이다.
일단, 강제로 datetime 값을 지정해서 하드코딩해놨으나 그래도 돌아가지 않음.
이때 발생했던 error는 id값은 autoincrement 해놨음에도 불구하고, id한테 defaultValue 값을 정해달라는 메시지였다.
찾아본 결과, sql의 strict mode를 해제하라는 solution이 있어서 실행해봤고 성공했음.
https://stackoverflow.com/questions/25865104/field-id-doesnt-have-a-default-value

하지만, 이번엔 id 값이 duplicate 되는 문제 발생
일단 하던거 하고 오후에 수정해보겠음!
수정 결과 내 자신에게 매우 화남 😠
user table에서 autoincrement 지정 안해줘서 그런것이였다..... 다신 이런 실수 하지 말자....
이것때문에 수정하려고 보니까 다른 테이블에서 fk 참조해둔 게 있어서 autoincrement 속성 추가 query가 안먹혔다.
다른 테이블에서 일일이 다 해제해야 하나 고민하던 중

SET FOREIGN_KEY_CHECKS = 0;

ALTER TABLE `tingting`.`user` 
CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT ;

SET FOREIGN_KEY_CHECKS = 1;

이런식으로 foreign key check를 해제했다가 다시 설정하는 해결 방법을 찾아냈다 개꿀띠

세번째는 이런식으로 sql syntax 관련 오류가 떴다.

default current_time update on current time
code: 'ER_PARSE_ERROR',
     errno: 1064,
     sqlState: '42000',
     sqlMessage:
      'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version 
for the right syntax to use near \'ON UPDATE CURRENT_TIMESTAMP,?)\' at line 1'

DB에는 문제가 없었어서 뭘까했는데ㅠㅠ sequelize에서 설정을 잘못해줬다.
user.entity.js에서

updated_at: {
      type: Sequelize.DATE,
      allowNull: false,
      defaultValue: db.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
    },

이 부분이

updated_at: {
      type: Sequelize.DATE,
      allowNull: false,
      defaultValue: db.literal('CURRENT_TIMESTAMP'),
      onUpdate: db.literal('CURRENT_TIMESTAMP')
    },

이렇게 고쳐져야 했던 것이다! 딥-빡

profile
안녕하세요 양지원입니다

0개의 댓글