네이밍 규칙이 존재
테이블에 들어있는 애트리뷰트가 엄청 많음
제가 작성한 사용자 테이블에는 아이디, 코드, 유입 서비스 명 만 들어있었다면
회사에서 실제로 사용하는 이름, 이메일, 사용유무, 회사명, 회사코드 등이 들어있네요
다대다 관계로 만들어진 테이블에서 기본키를 결정하는 방법
구글 검색어에 '다대다 관계 해소의 이유와 과정', '다대다 관계 테이블' 이 있네요
검색해서 공부해봐야겠습니다.
검색해서 공부한 다대다 관계 테이블 설명 글들 입니다.
링크1 - https://goodteacher.tistory.com/466
링크2 - https://ryulstudy.tistory.com/114
회사에서 실제로 사용할 문제은행을 만들어보려고합니다.
문제은행 제작 과정을 기록하면서 어떤 부분을 배우고, 어디서 제 실수가 나는지를 확인해보겠습니다.
제가 사용하고있는 MySQL 버전은 8.0버전이고
회사에서 사용하는 MySQL 버전은 5.7버전입니다.
차이점을 알아보고 다운그레이드 해야한다면 하도록 하겠습니다.
5.7 버전과 8 버전의 차이
참고 링크 - https://velog.io/@minbo2002/MySQL5.7MySQL8.0
참조 링크 - https://wonsjung.tistory.com/582
- 사용자 인증 방식 5.7 - Native Authentication, 8.0 - Caching SHA-2 Authentication
- 외래키 이름 64글자로 제한
- 인덱스 힌트 성능 저하
- 파티션의 각 테이블스페이스를 공용테이블스페이스에 저장 불가
즉 새로 테이블을 만든다면 크게 문제될 게 없으므로 8.0 버전을 그대로 사용하겠습니다!
그래서 그렇게 해서 넣으려고 하는데
오류가 난다. - 링크
엥? 왜 안 될까 고민하다가
검색해서 살펴보기
"AUTO_INCREMENT를 추가하는 컬럼은 기본키 설정을 가지고 있어야 한다. (무조건은 아니다. 하지만 대부분의 경우에서)" 라는 글을 봤습니다.
실제로 MySQL Output 창에서
Error Code: 1075. Incorrect table definition; there can be only one auto column and it must be defined as a key 0.000 sec
가 나오네요
그러므로 기본키가 설정되어있어야 AUTO_INCREMENT를 사용할 수 있는 것이다.
그래서 AUTO_INCREMENT를 뒤로 ALTER TABLE 코드에서 설정하도록 쿼리문의 제일뒤로 뺐습니다.
ALTER TABLE QB_HINT MODIFY HINT_ID INT NOT NULL AUTO_INCREMENT;
이 ALTER 쿼리문을 테이블 생성 뒤에 넣어줬더니 잘 돌아가더라구요
완료!
더미 데이터를 넣고 테스트를 해보려하는데
insert문을 여러 번 하면
그 데이터가 곧장 다 들어가더라고요
이 문제를 해결해보려고합니다. - 참조한 설명글 링크
PRIMARY KEY를 설정해주면 된다고 합니다.
그런데 제가 PRIMARY KEY를 설정해줬음에도 같은 insert문의 데이터가 곧장 다 들어간 이유는 auto_increment로 올라가는 id 칼럼이 있었기 때문입니다.
테이블에 데이터를 잘못 넣어서 삭제하려고 쿼리문을 날렸더니 이런 오류가 떴습니다.
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.
To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 0.000 sec
이 오류는 검색해보니까
delete문을 쓸 때 기본키를 사용하여 삭제하지 않으면 띄우는 오류라고 합니다.
그렇기때문에 기본키를 가지고 행을 삭제하거나
아니면 safe mode를 끄면 된다고 합니다.
기본키를 가지고 삭제하는 게 안전하기 때문에 safe mode를 끄진 않겠습니다.
이 블로그 글을 참고하여 사용해봤습니다. -
-- for문 사용하기
DELIMITER $$
CREATE PROCEDURE myFunction() -- ⓐ myFunction이라는 이름의 프로시져
BEGIN
DECLARE i INT DEFAULT 1; -- ⓑ i변수 선언, defalt값으로 1설정
WHILE (i <= 10) DO -- ⓒ for문 작성(i가 1000이 될 때까지 반복)
delete from qb_qustn_grp_mapping WHERE GRP_QUSTN_ID=(i); -- ⓓ 테이블에 i값 넣어주기
SET i = i + 1; -- ⓔ i값에 1더해주고 WHILE문 처음으로 이동
END WHILE;
END$$
DELIMITER ; -- ⓕ구분 기호를 다시 ;로 바꿔주기
CALL myFunction();
코드를 그대로 가져와서 조금만 수정해봤죠
잘 돌아가니까 기분이 좋더라고요
이렇게 더미데이터를 모두 완성하고 집어넣어봤습니다.
3가지 질문을 했고 간략하게 적어보겠습니다.