25/09/09-10 데이터베이스

344th·2025년 12월 11일

AWS AI

목록 보기
14/48

MySQL 에서는 NULL 값을 가장 작은 값으로 취급

-- GROUP BY 를 포함한 전체 SQL 실행 순서
1. FROM: 테이블 선
2. WHERE: 개별 행 필터링
3. GROUP BY: 선택 그룹 만들기
4. SELECT: 결과 선택
5. ORDER BY: 정렬
1. FROM: 테이블 선택
2. WHERE: 개별 행 필터링
3. GROUP BY: 선택 그룹 만들기
4. SUM 계산
5. SELECT: 결과 선택
WHERE: 개별 행에 조건을 적용
HAVING: 그룹 집계 후 조건을 적용(조건 = 집계함수)
1. FROM
2. GROUP BY
3. SUM
4. HAVING
5. SELECT

SQL 문의 종류

DML(Data Manipulation Language)

: 데이터 조작어

: 데이터를 검색 및 삽입, 수정, 삭제할 때 사용

  • DML 구문으로 조작하는 대상 : 테이블의 행
  • SELECT
  • INSERT
  • UPDATE
  • DELETE

트랜잭션(Transaction)

: 테이블의 데이터를 삽입, 수정, 삭제할 때 실제 테이블에 바로 적용하지 않고 임시로 적용하는 명령

→ 트랜잭션을 사용하면 실수로 데이터를 잘못 변경했을 때 임시로 적용한 것을 취소 가능

DDL(Data Definition Language)

: 데이터 정의어

: 데이터베이스 개체를 생성, 삭제, 변경할 때 사용

  • DDL은 트랜잭션을 발생시키지 않으므로 한번 실행한 내용을 롤백하거나 커밋으로 완전 적용할 수 없다(실행 취소 불가)
  • DDL 문으로 실행한 내용은 즉시 MySQL 에 적용
  • CREATE
  • DROP
  • ALTER
  • TRUNCATE

DCL(Data Control Language)

: 데이터 제어어

: 사용자에게 어떤 권한을 부여하거나 빼앗을 때 사용하는 언어

  • GRANT
  • REVOKE
  • DENY

DML

UPDATE, DELETE주의사항

: 바로 UPDATE 실행하지 말 것

: WHERE 절을 생략할 수 있으나, 생략하면 테이블 전체 행이 수정됨

: 수정을 원하는 부분부터 SELECT 문으로 확인한 후, WHERE 절에 적용할 것

: WHERE 절을 빼먹지 말 것

→ IDE 에서는 경고문을 출력하기도 함

-- 대용량 테이블 생성
CREATE TABLE bigTBL1 (SELECT * FROM employees.employees);
CREATE TABLE bigTBL2 (SELECT * FROM employees.employees);
CREATE TABLE bigTBL3 (SELECT * FROM employees.employees);

-- 테이블 삭제 3가지 방식 실행시간 차이 비교
DELETE FROM bigTBL1;	-- 4.7s
DROP TABLE bigTBL2;		-- 0.065s
TRUNCATE TABLE bigTBL3;		-- 0.100s
  • DELETE
    • 트랜잭션을 사용함.
    • 행 단위로 삭제하며, 트랜잭션을 로그에 기록함.
    • 복구 가능(Rollback 사용)
    • 테이블 구조 유지
  • DROP
    • 가장 빠름
    • 복구 불가능
    • 테이블 구조까지 완전 제거
  • TRUNCATE
    • 빠름
    • 복구 불가능
    • 테이블 구조 유지

COMMIT, ROLLBACK

COMMIT

: 현재 트랜잭션에서 발생한 모든 변경을 데이터베이스에 “영구적으로 반영”하는 명령

  • 즉, 지금까지 임시로만 적용되어 있던 INSERT, UPDATE, DELETE 같은 변경들을 확정.
  • 이 시점 이후에는 ROLLBACK(되돌리기) 불가능.
SELECT @@autocommit;
SELECT * FROM bigTBL1;
ROLLBACK;

-- 기본 상태: autocommit = 1 (자동 커밋 활성화)
SET autocommit = 0;	-- 자동 커밋 끄기
SELECT @@autocommit;	-- 0(꺼짐)
SELECT COUNT(*) FROM bigTBL2;	
DELETE FROM bigTBL2;
SELECT COUNT(*) FROM bigTBL2;	
ROLLBACK;
SELECT COUNT(*) FROM bigTBL2;	
DELETE FROM bigTBL2;
SELECT COUNT(*) FROM bigTBL2;	
COMMIT;
ROLLBACK;
SELECT COUNT(*) FROM bigTBL2;	
SET autocommit = 1;		-- 자동 커밋 활성화

데이터 삽입시 중복(기본키)

-- IGNORE: 오류가 발생해도 무시하고 넘어감. 오류 메세지만 출력
-- 기본키 중복된 행은 무시하고 나머지만 추가
INSERT IGNORE INTO memberTBL VALUES
	('KHD', '강포동', '일본'),
	('new1', '강아지', '멍멍'),
	('new2', '고양이', '야옹');

SELECT * FROM memberTBL;

-- ON DUPLICATE KEY UPDATE
-- 기본키가 중복될 시 새로운 삽입한 데이터로 변경
INSERT INTO memberTBL
VALUES ('KHD', '강포동', '일본')
ON DUPLICATE KEY UPDATE
	userName = '강포동',
	addr = '일본';

SELECT * FROM memberTBL;

조인과 SQL 프로그래밍

조인(JOIN)

: 2개 이상의 테이블을 묶어서 하나의 결과 테이블을 만드는 것

관계의 종류

  • 일대일
  • 일대다
  • 다대다
profile
새싹 개발자

0개의 댓글