[코딩 자율학습 14기] SQL 데이터베이스 입문 2장

안지원·2025년 4월 10일

SQL

목록 보기
2/10
post-thumbnail

2장. 데이터 생성, 조회, 수정, 삭제하기

📗 데이터 CRUD란

  • 데이터 CRUD란 DB의 데이터를 관리하기 위한 기본 동작을 뜻합니다.
  • 데이터 CRUD는 DBMS의 필수기능으로 SQL명령을 통해 수행됩니다.
  • CRUD를 뜻하는 기능들을 다음 4가지 입니다.

CRUD

  • Create : 생성
  • Read : 조회
  • Update : 수정
  • Delete : 삭제

📗 SQL 실습하며 개념 익히기(맥도날드 DB 만들기)

📌 쿼리(query)란?

  • 쿼리란 '문의하다', '질문하다' 라는 뜻으로 DB에서 사용자가 원하는 데이터를 얻기 위해 DBMS에 문의, 질문을 요청하는 것입니다.
  • 쿼리는 SQL을 이용해 하나의 명령문으로 작성하며, 하나의 쿼리는 하나의 ;(세미콜론)으로 구분합니다.

📌 목록을 조회하기 위한 쿼리 - SHOW

  • SHOW는 데이터를 조회할 때 사용되는 SQL쿼리문입니다.
  • "SHOW DATABASES"를 MySQL 쿼리편집기(query editor)에 입력후 값을 출력해보면 4가지의 시스템 DB를 조회해 볼 수 있습니다.

📌 시스템 DB

  • 시스템 DB는 MySQL서버의 운영과 유지, 관리에 중요한 역할을 합니다.
  • 사용자의 DB와 분리되어 있으며, 주로 읽기와 분석 목적으로만 사용하고 사용자의 수정을 권장하지 않습니다.
  • 4가지 시스템 DB는 다음과 같은 역할을 수행하고 있습니다.

시스템 DB
1. information_schema

  • MySQL 서버에 메타데이터 제공
  • 메타데이터 : DB구조에 대한 정보(튜플, 칼럼, 인덱스, 사용자 권한 등)
  1. mysql
  • MySQL 서버의 사용자 계정 정보, 권한 그리고 다른 시스템 레벨의 정보 저장
  1. performance_schema
  • MySQL 서버의 성능 진단 및 모니터링 하면서 관련된 데이터를 저장
  1. sys
  • performance_schema의 데이터를 단순화해 사용자가 더 쉽게 성능을 분석하도록 도와줌

📌 DB를 생성하기 위한 쿼리 - CREATE

  • CREATE는 새로운 DB를 생성하기 위해 사용되는 SQL 쿼리문 입니다.
  • "CREATE DATABASE -DB명"을 쿼리에디터에 입력하면 새로운 데이터베이스를 생성합니다.
  • DB를 생성하고 나서 좌측 네비게이션 상단의 새로고침을 누르면 DB(mapdonalds) 가 추가된 걸 확인할 수 있습니다.

📌 DB에 진입하기 위한 쿼리 - USE

  • USE는 DB에 진입하기 위해 사용되는 SQL 쿼리문 입니다.
  • "USE -DB명"을 입력하면 해당 DB를 사용하겠다는 의미로 DB에 진입하게 됩니다.
  • 진입에 성공하면 사이드바의 schemas탭에 DB명이 볼드처리 되며 펼쳐집니다.
  • 데이터 진입 성공여부를 확인하고 싶다면 SELECT 쿼리문을 사용해 확인해볼 수 있습니다.
  • "SELECT DATABASE()" 쿼리문을 사용하면 현재 진입중인 DB를 확인할 수 있습니다.

📌 DB를 삭제하기 위한 쿼리 - DROP DATABASE

  • DROP는 생성한 DATABASE 또는 TABLE을 삭제하기 위해 사용되는 SQL 쿼리문입니다.
  • "DROP DATABASE -DB명"을 입력하면 해당하는 DB를 삭제합니다.
  • 사이드바의 schemas탭에서 DB가 삭제됨을 확인할 수 있습니다.

📌 SQL문에서 주석 --, /**/

  • SQL에선 -- 와 /**/ 으로 주석 처리를 할 수 있습니다.
  • 주석 처리된 SQL문은 SQL문을 실행할때 실행되지 않습니다.

주석
1. -- : 한 줄 주석
2. /**/ : 블록 주석

  • -- 주석이 적용되면서 DROP 쿼리문이 실행되지 않는 것을 확인할 수 있다.

📗 데이터를 삽입 및 조회하기

📌 테이블을 만들기 위한 쿼리문 - CREATE TABLE

  • 테이블은 DB 안에서 데이터를 효율적으로 관리하기 위한 2차원 배열 구조입니다.
  • 우선 CREATE DATABASE와 USE 쿼리문으로 진입한 DB를 준비합니다.
  • DB 안에 테이블을 만들기 위해선 CREATE 쿼리문을 사용합니다.
  • "CREATE TABLE -테이블명()"쿼리문을 통해 진입한 DB 안에 테이블을 생성할 수 있습니다.
  • CREATE TABLE를 사용하면 데이터의 튜플에 들어갈 칼럼들을 만들어줘야 합니다.
  • 칼럼은 다음과 같이 생성합니다.
CREATE TABLE 테이블명 (
	칼럼명1 자료형1,
    칼럼명2 자료형2,
    ...
    PRIMARY KEY(칼럼명)
)
  • 여기서 칼럼명칼럼의 이름을 말하고, 자료형칼럼의 데이터 유형을 말합니다.
  • 데이터 유형은 데이터의 일관성을 위해 지정하는 유형입니다.
  • 크게 숫자형, 문자형, 날짜 및 시간형 등이 있습니다.

🔑 기본키(PRIMARY KEY)

  • PRIMARY KEY는 기본키를 설정하는 키워드입니다.
  • PRIMARY KEY() 안에 기본키로 지정할 칼럼명을 작성하면 기본키로 설정됩니다.
  • 기본키(PRIMARY KEY)는 테이블의 각 튜플을 식별하는데 사용하는 칼럼 입니다.

  • 다음과 같이 TABLE 생성 쿼리문을 작성하면 schemas탭에 현재 진입한 DB에 burgers테이블이 생성된 걸 확인할 수 있습니다.

  • 추가로 PRIMARY KEY는 기본키로 지정할 칼럼을 정의할 때 같이 넣어서 사용이 가능합니다.

📌 정수형 INTEGER, 문자형 VARCHAR

  • 자료형의 대표적인 유형으로 정수형과 문자형을 먼저 설명하겠습니다.
  • 정수형 INTEGER은 숫자 중에서도 정수(-1, 0, 1 = (O), 1.1 = (X))만을 저장하는 자료형입니다.
  • 문자형 VARCHAR는 저장할 수 있는 최대 문자 길이를 지정할 수 있습니다.
  • 예를 들어 VARCHAR(100)은 최대 100자 까지, VARCHAR(255)는 최대 255자 까지 저장할 수 있습니다.

📌 테이블의 구조를 조회하는 쿼리문 - DESC

  • DESC는 테이블의 구조를 표 형식으로 조회할 수 있는 SQL문 입니다.
  • "DESC -테이블명"을 입력해서 조회할 수 있습니다.
  • 조회된 테이블의 구조를 살펴보면 다음과 같습니다.

TABLE 구조
1. Field(필드)

  • 테이블의 칼럼을 나타냄
  1. Type(타입)
  • 칼럼의 자료형을 나타냄(varchar(VARCHAR), int(INTEGER) 등)
  1. Null(널)
  • 칼럼에 값을 반드시 넣어야 하는지 아닌지 구분
  • true : 필수값, false : 선택값
  1. Key(키)
  • 칼럼이 테이블의 특별한 키로 사용되는지를 나타냄
  • 해당 칼럼이 어떤 키로 사용되느냐에 따라 데이터의 무결성과 쿼리의 효율성에 영향을 미침
  • 기본키(primary Key, PRI), 외래키(foregin key, MUL), 고유키(unique key, UNI)등의 키가 존재함
  1. Default(디폴트)
  • 칼럼의 기본값을 나타냄
  • 특정 칼람에 값을 넣지 않은 경우 해당 값이 자동으로 입력됨
  1. Extra(엑스트라)
  • 칼럼에 적용된 추가 속성을 나타냄

📌 테이블에 데이터를 삽입하는 쿼리문 - INSERT INTO

  • INSERT INTO문은 테이블에 데이터를 삽입할 수 있는 SQL문 입니다.
  • INSERT INTO 다음에 데이터를 삽입할 테이블명과 칼럼 목록을 작성하고, VALUES 다음에 괄호를 열고 칼럼 순서대로 입력값을 작성합니다.
INSERT INTO 테이블명 (칼럼명1, 칼럼명2, ...)
VALUES (입력값1, 입력값2);
  • 여기서 쿼리문을 INSERT라인에서 세미콜론 ; 찍지 않고 VALUES까지 이어가야합니다.(VALUES 까지가 INSERT INTO문이기 때문입니다.)

  • 이렇게 INSERT 쿼리문을 사용했다면 burgers테이블에 정상적으로 튜플이 추가되었을겁니다.

  • VALUES에 괄호()와 쉽표를 이용해서 여러개의 행을 추가할 수 있습니다.

📌 테이블에 있는 데이터를 조회하는 쿼리문 - SELECT

  • INSERT로 추가한 데이터를 조회하기 위해선 기존의 데이터를 조회하는 문 SELECT에서 추가로 FROM절을 입력해 어떤 테이블로부터 데이터를 조회할 지 고를 수 있습니다.
  • 이렇게 SELECT에 *(전체조회), FROM절에 조회할 테이블명을 입력하면 해당 테이블에 데이터를 조회할 수 있습니다.
  • SELECT에 전체 말고도 특정 칼럼 값을 조회할 수도 있습니다.
SELECT 칼럼1, 칼럼2
FROM 테이블명;
  • 이렇게 필요한 칼럼명을 입력해서 조회하면 해당하는 칼럼 데이터만 출력해줍니다.
  • SELECT문에는 추가로 WHERE절을 추가해 조건을 걸 수 있습니다.
  • 해당 칼럼의 모든 데이터를 빼오지 않고, 특정 데이터만 뽑아오고 싶다면 사용합니다.

📗 데이터 수정 및 삭제하기

📌 테이블을 수정하는 쿼리문 - UPDATE

  • 테이블의 데이터를 수정할 때는 UPDATE문을 사용합니다.
  • UPDATE문은 SET 절과 함께 사용하여 테이블을 수정할 수 있습니다.
UPDATE 테이블명
SET 칼럼명 = 입력값;
  • 다음과 같이 UPDATE엔 테이블명을, SET엔 테이블 수정에 대한 내용을 담으면 테이블 수정이 가능합니다.
  • 추가로 WHERE절을 추가해 특정 테이블의 값만 수정할 수 있습니다.
UPDATE 테이블명
SET 칼럼명 = 입력값
WHERE 조건문;

💥 MySQL에디터의 실수 보호장치 안전모드(SQL_SAFE_UPDATES)

  • 만약 SET문을 통해 테이블의 모든 튜플을 수정하려 한다면 MySQL에티터에서 안전장치가 발동됩니다.
  • 이는 실수로 대량의 데이터를 수정하는것을 방지하기 위해 만들어둔 보호장치입니다.
  • 테이블의 모든 값의 값을 수정하기 위해선 안전모드를 해제해야 합니다.
  • 안전모드 해제 명령어는 다음과 같습니다.
SET SQL_SAFE_UPDATES = 0;
  • 안전모드는 켜두는 것을 권장하기 때문에 한번 사용하고 난 후에 다시 1로 돌려놔야 합니다.
  • 이렇게 안전모드를 해제하면 테이블의 전체 튜플을 변경할 수 있습니다.
SET SQL_SAFE_UPDATES = 0;
UPDATE burgers
SET price = 1000;
SET SQL_SAFE_UPDATES = 1;
  • 이렇게 모든 햄버거의 가격을 1000원으로 수정할 수 있습니다.
  • Action Output에서 안전모드가 0, 1이 정상적으로 처리되는지도 잘 확인해야 합니다.

🔫 WHERE절로 특정 튜플만 수정하기

  • WHERE절을 이용해서 특정 튜플만 수정하려면 다음과 같이 조건문을 만들어서 사용할 수 있습니다.
UPDATE burgers
SET price = 50000
WHERE name = '빅맥'
  • 그런데 위의 코드로 수정을 실행하면 또 MySQL에디터의 안전장치에 걸리게 됩니다.
  • 그 이유는 WHERE절의 조건이 기본키(primary key)를 대상으로 하지 않기 때문입니다.
  • UPDATE문은 반드시 키를 조건으로 대상을 찾아야 합니다.
  • 따라서 WHERE절의 name = '빅맥'을 id = 1 조건으로 바꿔서 실행해줘야 합니다.
  • 이렇게 기본키를 사용하는 값을 조건으로 걸면 그 값에 해당하는 튜플만 수정이 됩니다.

📌 데이터를 삭제하는 쿼리문 - DELETE

  • DELETE문은 테이블에서 데이터를 삭제할 때 사용합니다.
  • DELETE문은 튜플 단위로 삭제하며, FROM절로 대상 테이블을 설정할 수 있고, UPDATE문과 동일하게 WHERE절로 삭제할 조건을 걸 수 있습니다.
  • DELETE문은 UPDATE문과 다르게 안전장치가 적용되지 않아 삭제가 바로 됩니다.
  • 의도하지 않고 실수로 WHERE절을 생략해 문을 작성했다면 모든 데이터가 사라질 수 있습니다. 사용에 조심합니다.
DELETE FROM burger;	-- 모든 튜플 삭제
DELETE FROM burger
WHERE id = 4; 		-- id가 4인 튜플만 삭제

  • 다음 사진을 보면 burgers테이블에 id가 4인 슈비두밥 버거 튜플이 삭제된 걸 볼 수 있습니다.
  • 이렇게 기본키를 대상으로 WHERE절을 작성하면 정상적으로 해당하는 튜플을 삭제할 수 있습니다.

📌 테이블을 삭제하는 쿼리문 - DROP TABLE

  • 테이블을 삭제하는 방법은 DB를 삭제했던 쿼리문 DROP에서 TABLE절을 추가하면 됩니다.
DROP TABLE 테이블명;
  • 테이블의 데이터 뿐 만 아니라 테이블 자체가 필요없어진 경우에 사용합니다.
  • DROP 명령어는 한 번 수행되면 되돌릴 수 없으니 신중하게 사용해야 합니다.
  • 다음과 같이 DROP로 테이블을 지우면 그 다음에 실행되는 테이블 명령어가 오류가 발생하는 것을 확인할 수 있습니다.
  • 테이블이 사라져 더이상 burgers테이블을 참조할 수 없게 되기 때문입니다.
  • 실제로 삭제를 하면 사이드바의 Schema탭에서 burgers테이블이 사라진걸 확인할 수 있습니다.

🧪 셀프테스트

profile
frontend개발자가 되기 위해 노력합니다.

0개의 댓글