[DB] 데이터 생성, 조회, 수정, 삭제하기

artp·2025년 2월 10일
0

database

목록 보기
2/10
post-thumbnail

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

2.1 데이터 CRUD란

데이터 CRUD란 데이터베이스의 데이터를 관리하기 위한 기본 동작으로
데이터를 생성(Create), 조회(Read), 수정(Update), 삭제(Delete)하는 것을 말합니다.
데이터 CRUD는 DBMS의 필수 기능으로 SQL 명령을 통해 수행합니다.

❗️참고
쿼리(query)란 '문의하다', '질문하다'라는 뜻으로 데이터베이스에 사용자가 원하는 특정 데이터를 보여달라고 요청하는 것입니다.
쿼리는 SQL을 이용해 하나의 명령문으로 작성하며, 하나의 쿼리는 하나의 ;(세미콜론)으로 구분합니다.

2.2 데이터베이스 만들기

2.2.1 데이터베이스 목록 조회하기

MySQL 서버에 저장된 데이터베이스 목록을 조회하는 쿼리는 다음과 같습니다.

SHOW DATABASES;

2.2.2 새 데이터베이스 만들고 진입하기

새로운 데이터베이스를 만들기 위한 쿼리 형식은 다음과 같습니다.

CREATE DATABASE 데이터베이스명;

새로 만든 데이터베이스에 진입하는 쿼리는 다음과 같습니다. 데이터베이스에 진입하는 것은 해당 데이터베이스를 사용하겠다는 의미이므로 USE 문을 사용합니다.

USE 데이터베이스명;

데이터베이스 진입 성공 여부는 다음 SQL 문을 통해 확인할 수 있습니다. 이를 실행하면 결과 창에 현재 사용 중인 데이터베이스 나타납니다.

SELECT DATABASE();

2.2.3 데이터베이스 삭제하기

데이터베이스 자체를 삭제할 때는 DROP DATABASE를 사용합니다.

-- 해당 데이터베이스 내부의 모든 테이블과 데이터가 영구적으로 삭제됨
DROP DATABASE 데이터베이스명;

만약 데이터베이스가 존재할 때만 삭제하고 싶다면 IF EXISTS 옵션을 사용할 수 있습니다.

-- 해당 데이터베이스가 존재할 때만 삭제됨
DROP DATABASE IF EXISTS 데이터베이스명;

2.2.4 주석

SQL 코드에서도 주석을 사용하여 코드에 대한 설명을 추가할 수 있습니다.
주석이란 쿼리에 대한 설명을 메모로 작성한 것으로 주석은 쿼리 실행에 아무런 영향을 미치지 않습니다.

SQL 주석은 한 줄 주석블록 주석이 있습니다.

한 줄 주석

연속된 하이픈 두 개(--)로 작성하며 해당 줄이 모두 주석 처리됩니다.

-- 이 코드는 데이터베이스를 생성합니다.
CREATE DATABSE mydb;

블록 주석(여러 줄 주석)

/*로 열고 */로 닫는 형식으로 작성합니다. 주석의 시작과 끝을 표시하기 때문에 여러 줄에 걸쳐 주석을 작성할 때 사용합니다.

/*
  이 코드는 데이터베이스를 생성하고,
  이후 해당 데이터베이스로 진입합니다.
*/
CREATE DATABASE mydb;
USE mydb;

2.3 데이터 삽입 및 조회하기

데이터베이스를 만들었으니, 이제 테이블을 생성하고 데이터를 삽입, 조회하는 방법을 알아보겠습니다.

2.3.1 테이블 만들기

테이블을 생성하려면 CREATE TABLE 문을 사용합니다.

CREATE TABLE 테이블명 (
	칼럼명1 자료형1,
    칼럼명2 자료형2,
    ...
    PRIMARY KEY (칼럼명)
);

CREATE TABLE 문에서 칼럼명은 칼럼의 이름을 말하고, 자료형은 칼럼의 데이터 유형을 말합니다. 데이터 유형은 크게 숫자형, 문자형, 날짜 및 시간형이 있습니다.
PRIMARY KEY기본키를 설정하는 키워드입니다. 괄호 안에 기본키로 지정할 칼럼명을 작성하면 기본키로 설정됩니다.

기본키(Primary Key)는 중복되지 않으며 NULL을 허용하지 않는 고유한 값으로, 테이블의 각 행을 식별하는 칼럼입니다.

기본키는 PRIMARY KEY 키워드를 사용해 별도 행에 지정하는 방법이 있고, 다음과 같이 칼럼을 정의할 때 같이 지정하는 방법도 있습니다.

CREATE TABLE table (
	id INTEGER PRIMARY KEY, -- 칼럼을 정의할 때 기본키 지정 가능
    ...
)

2.3.2 테이블의 구조 조회하기

테이블의 구조(스키마)를 확인하려면 다음 명령어를 사용합니다. DESC 문은 조회하는 테이블의 구조를 표 형식으로 보여 줍니다.

DESC 테이블명;

2.3.3 데이터 삽입 및 조회하기

데이터 삽입

테이블에 데이터를 삽입할 때는 INSERT INTO 문을 사용합니다.
다음과 같이 INSERT INTO 다음에 데이터를 삽입할 테이블명과 칼럼 목록을 작성하고, VALUES 다음에 괄호를 열고 칼럼 순서대로 실제 입력값을 작성합니다.

INSERT INTO 테이블명 (칼럼명1, 칼럼명2, ...)
VALUES (입력값1, 입력값2, ...);

예제: users 테이블에 데이터 삽입하기

users 테이블에 데이터 삽입하기

INSERT INTO users (name, email)
VALUES ('홍길동', 'abc@example.com');

여러 개의 데이터를 한 번에 삽입하기

INSERT INTO users (name, email)
VALUES
	('김김김', 'kim@example.com'),
    ('이이이', 'lee@example.com');

모든 칼럼에 값을 삽입할 경우 칼럼명을 생략할 수 있음

INSERT INTO users
VALUES (1, '박박박', 'park@example.com', NOW());

❗️주의
칼럼명을 생략하면 모든 칼럼 순서대로 값을 넣어야 합니다.

데이터 조회

테이블의 데이터를 조회할 때는 SELECT 문을 사용합니다.
SELECT 다음에 조회할 칼럼명을 나열하고 FROM 뒤에 조회할 테이블명을 적습니다. 마지막으로 WHERE 절에는 조회하고 싶은 조건을 작성합니다.

SELECT 칼럼명1, 칼럼명2, ...
FROM 테이블명
WHERE 조건;

모든 데이터 조회 (* 사용)

테이블의 모든 데이터를 조회하고 싶다면 칼럼명 대신 *(애스터리스크) 기호를 사용하고, WHERE 절은 생략합니다.

SELECT * FROM 테이블명;

특정 조건을 사용한 조회 (WHERE 절 활용)

특정 이메일을 가진 사용자 찾기

SELECT * FROM users WHERE email = 'abc@example.com';

나이가 30세 이상인 사용자 조회

SELECT * FROM users WHERE age >= 30;

특정 범위의 데이터 조회(BETWEEN) 사용

SELECT * FROM orders WHERE order_date BETWEEN '2025-01-01' AND '2025-2-10';

특정 문자열 포함 데이터 조회(LIKE 사용)

SELECT * FROM users WHERE name LIKE '김%'; -- 이름이 '김'으로 시작하는 사람 조회

정렬하여 조회 (ORDER BY)

데이터를 정렬하여 조회할 수도 있습니다.

-- 이름을 오름차순으로 정렬
SELECT * FROM users ORDER BY name ASC;
-- 최근 가입한 사용자부터 내림차순으로 조회
SELECT * FROM users ORDER BY created_at DESC;

조회할 데이터 개수 제한 (LIMIT)

조회할 데이터 개수를 제한하여 조회할 수도 있습니다.

-- 상위 5개 데이터만 조회
SELECT * FROM users LIMIT 5;
-- 3번째 데이터부터 5개만 조회
SELECT * FROM users LIMIT 3, 5;

2.4 데이터 수정 및 삭제하기

2.4.1 데이터 수정하기

테이블의 데이터를 수정할 때는 UPDATE 문을 사용합니다.
UPDATE 문의 SET 절에는 수정할 칼럼명과 수정할 값을 입력하고, WHERE 절에는 수정할 대상을 찾기 위한 조건을 입력합니다. 조건이 없다면 WHERE 절은 생략할 수 있습니다.

UPDATE 테이블명
SET 칼럼명1 =1, 칼럼명2 =2, ...
WHERE 조건;

예제

특정 데이터 수정: 홍길동의 이메일 변경

UPDATE users
SET email = 'honghong@example.com'
WHERE name = '홍길동';

여러 개의 데이터 수정: 모든 사용자의 이메일 도메인 변경

UPDATE users
SET email = REPLACE(email, 'example.com', 'test.com');

모든 튜플 수정하기

MySQL은 실수로 대량의 데이터를 수정하는 것을 방지하기 위해 안전모드가 설정되어 있습니다. 안전모드를 해제하지 않고 수정하면 다음과 같은 에러가 발생합니다.

안전모드 해제

다음 명령으로 안전모드를 해제할 수 있습니다. 출력 창에 안전모드를 해제했다는 성공 표시가 뜹니다.

-- 안전모드 해제
SET SQL_SAFE_UPDATES = 0;

안전모드 재설정

안전모드 해제는 권장사항이 아닙니다. 따라서 데이터 수정 작업이 끝나면 안전모드를 재설정하도록 합니다.
재설정 후 출력 창에 안전모드를 설정했다는 성공 표시가 뜨는지 확인합니다.

-- 안전모드 재설정
SET SQL_SAFE_UPDATES = 1;

2.4.2 데이터 삭제하기

테이블에서 특정 데이터를 삭제할 때는 DELETE 문을 사용합니다.

DELETE FROM 테이블명 WHERE 조건;

WHERE 절을 사용하지 않으면 테이블 자체의 구조만 남고 모든 데이터가 삭제됩니다.

DELETE FROM 테이블명;

테이블의 모든 데이터 삭제

테이블의 모든 데이터를 삭제할 때는 조건 없이(WHERE 없이) DELETE를 사용할 수도 있지만, TRUNCATE를 사용하는 것이 더 효율적입니다.

TRUNCATE는 테이블의 모든 데이터를 빠르게 삭제하고, 자동 증가값(AUTO_INCREMENT)을 초기화합니다.

예제: DELETE로 모든 데이터 삭제

-- users 테이블의 모든 행 삭제
DELETE FROM users;

예제: TRUNCATE로 모든 데이터 삭제

-- 테이블의 모든 데이터를 삭제하고, 자동 증가값(AUTO_INCREMENT)을 초기화
TRUNCATE TABLE users;

2.4.3 테이블 삭제하기

테이블 자체를 삭제할 때는 DROP TABLE을 사용합니다.

-- 테이블과 함께 모든 데이터가 영구적으로 삭제됨
DROP TABLE 테이블명;
profile
donggyun_ee

0개의 댓글