SQL 모드 설정 변경(GROUP BY부분)
SQL 모드 설정 변경
ONLY_FULL_GROUP_BY 모드를 제거하면 GROUP BY 절의 사용이 더 유연해진다.
-- SQL 명령어를 사용하여 동적으로 변경
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
이 명령어는 일시적인 변경으로, MySQL 서버를 재시작하면 원래 설정으로 복원된다.
MySQL 설정 파일 my.ini에서 SQL 모드를 변경하여 특정 SQL 규칙을 완화하거나 강화할 수 있다.
1) (MySQL설치폴더) C:\ProgramData\MySQL\MySQL Server 8.0\my.ini-> 속성
사용자에서 everyone을 추가하고 수정권한을 추가해준다
2) 메모장으로 my.ini 열기
메모장 내용중
sql-
mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
부분을
sql-
mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
으로 변경(ONLY_FULL_GROUP_BY부분 삭제)
혹시 변경후 바로 저장이 안되고 다른이름으로 저장이 뜨면 권한부여가 제대로 안된것이다.(바로위 사진 참조)
3) MySQL재시작
윈도우 검색창에서 service검색
위 작업의 의미
my.ini 파일은 MySQL 서버의 설정 파일로, MySQL 서버가 어떻게 동작할지를 정의하는 다양한 설정들이 포함되어 있다. 이 파일을 수정함으로써 MySQL 서버의 동작 방식을 변경할 수 있다.
sql-mode는 MySQL 서버가 SQL 문을 처리하는 방식을 제어하는 설정이다. 이 설정은 여러 개의 SQL 모드를 콤마(,)로 구분하여 지정할 수 있다. 각 모드는 특정한 SQL 동작을 제어하거나 제한한다.
결론
- ONLY_FULL_GROUP_BY 모드를 제거함으로써, GROUP BY 절을 사용할 때 더 느슨한 제약 조건이 적용된다. 즉, GROUP BY 절에 명시되지 않은 컬럼을 쿼리에서 사용할 수 있게 되어, 기존에 이 모드 때문에 오류가 발생하던 쿼리들이 이제는 정상적으로 실행될 수 있다.
이 변경 작업은 주로 쿼리 작성의 유연성을 증가시키기 위해 이루어진다. 그러나, 이는 데이터 무결성에 영향을 미칠 수 있으므로 주의해서 사용해야 한다.