프로그래밍/SQL 59

[MySQL Error] warning : Integer display width is deprecated and will be removed in a future release. 해결 방법

warning : Integer display width is deprecated and will be removed in a future release. MySQL 테이블 생성 시 warning 뜸 원인 내용을 읽어보니 정수 타입 필드에 크기를 지정 발생한 warning임 MySQL 8.0.17 버전부터 도입된 변경 사항으로 추후 릴리스에서 정수 필드의 크기 지정하는 기능이 삭제될 예정이기에 경고 뜸 해결 방법 필드의 크기를 제거하면 해결 create table order ( order_seq int not null auto_increment, is_deleted int(1) default '0', primary key (order_seq) ); 아래와 같이 is_deleted int(1) -> is_..

프로그래밍/SQL 2023.04.21

[MySQL Error] GROUP BY 에러 해결 방법

Expression of SELECT list is not in GROUP BY clause and contains nonaggregated column which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 원인 GROUP BY 컬럼 사용 시 SELECT 가능한 컬럼은 GROUP BY에 나열된 컬럼과 집계 함수(SUM, COUNT 등)만 가능 그 외에 컬럼을 SELECT 한 경우 에러 발생 해결 방법 GROUP BY 에 모든 SELECT 컬럼 적어주기

프로그래밍/SQL 2023.04.17

[sql] drop, delete, truncate 차이

drop, delete, truncate 데이터를 삭제하는 구문 DROP 테이블, 뷰, 인덱스 등과 같은 데이터베이스 객체를 삭제시 사용 DROP을 사용하면 해당 객체와 모든 데이터가 삭제됨 예시 DROP TABLE user; DELETE 테이블에서 데이터 행을 삭제시 사용 DELETE을 사용하면 테이블의 특정 행을 삭제하거나 조건에 맞는 모든 행을 삭제할 수 있음 해당 행들이 차지하던 데이터 공간은 해제되어 재사용 → DB 용량은 그대로이기에 디스크 공간의 낭비가 발생할 수 있음 예시 DELETE FROM user WHERE age = 30; TRUNCATE 테이블에서 모든 행 삭제시 사용 테이블 스키마는 그대로 유지되고 테이블 내의 모든 데이터가 삭제 테이블에서 모든 행을 삭제하고 해당 행들이 차지하..

프로그래밍/SQL 2023.03.27

[SQL] 트랜잭션 격리 수준(isolation level)

트랜잭션 격리 수준 트랜잭션 격리 수준(Transaction Isolation Levels)은 고립도와 성능의 Trade-off 를 조절 트랜잭션 격리 수준이란 트랜잭션들끼리 얼마나 고립되어있는지 (잠금수준)를 나타내는 것으로 특정 트랜잭션이 다른 트랜잭션에 의해 변경된 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것 임 READ UNCOMMITTED(트렌젝션 레벨 0) : 다른 트랜잭션에서 커밋되지 않은 내용도 참조할 수 있음 READ COMMITTED(트렌젝션 레벨 1) : 다른 트랜잭션에서 커밋되 내용만 참조할 수 있음 (ORACLE) REPETABLE READ(트렌젝션 레벨 2) : 트랜잭션에 진입하기 이전에 커밋된 내용만 참조할 수 있음 (MySQL) SERIALIZABLE(트렌젝션 레벨 3..

프로그래밍/SQL 2022.12.30

[SQL] 조회된 ROW가 없을 때, RETURN 하는 방법

조회된 ROW가 없을 때, RETURN 하는 방법 일반적으로 조회 시 조건절에 부합하는 데이터 ROW가 없을 경우 조회되지 않음 그러나 JOIN 등 특수한 경우 조회되는 ROW가 없더라도 반환시켜야 하는 일이 생김 이러한 경우 간단하게 GROUP BY를 통하여 RETURN이 가능함 select u.user_id, o.order_number, uc.coupon_code from order o inner join user u on (o.user_id = u.user_id) inner join user_coupon uc on (u.user_id = uc.user_id) group by u.user_id;

프로그래밍/SQL 2022.12.28

[MySQL] 컬럼명 변경, 컬럼 순서 변경, 컬럼 타입 변경, 컬럼 추가, 컬럼 삭제

컬럼명 변경 ALTER TABLE 테이블명 CHANGE 기존컬럼명 변경할컬럼명 컬럼타입; ALTER TABLE user CHANGE user_email email varcher(256); 컬럼 순서변경 ALTER TABLE 테이블명 MODIFY 순서변경할컬럼명 컬럼타입 AFTER 앞에오는컬럼명; ALTER TABLE user MODIFY nickname varchar(64) AFTER user_id; 컬럼 디폴트값 변경 ALTER TABLE 테이블명 ALTER COLUMN 변경할컬럼명 SET DEFAULT 디폴트값; ALTER TABLE product ALTER COLUMN is_usable SET DEFAULT 1; 컬럼 타입변경 ALTER TABLE 테이블명 MODIFY 컬럼명 병경할컬럼타입; ALT..

프로그래밍/SQL 2022.12.26

[SQL] 실행 계획 보는 법

실행 계획이란? 사용자가 SQL을 실행하여 데이터를 추출하려고 할 때 옵티마이저가 수립하는 작업 절차 SQL Statement가 요구한 데이터를 추출하기 위해 DBMS가 차례로 수행하는 Acess 과정 SQL을 실행한 후 실행 계획을 판단하여 이 SQL이 어떠한 방식으로 실행되는지 확인 가능 쿼리문의 실행 계획을 확인하는 방법 1️⃣ EXPLAIN PLAN, AUTOTRACE, SQL TRACE 로 확인하는 방법 2️⃣ DBMS 관리 툴을 활용하여 실행 계획을 확인하는 방법 실행 순서 실행 계획은 여러 단계로 이루어져 있는데 이를 스텝이라고 함 각각의 스텝에는 그 단계에서 어떤 명령이 수행되었고 총 몇건의 데이터가 처리되었으며 이 처리를 위해 얼마만큼의 비용과 시간이 소요되었는지 표시함 1번 수행 👉 2..

프로그래밍/SQL 2022.12.16