본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

MySQL INSERT INTO 완전 정리 — member 테이블 생성과 데이터 삽입 전체 흐름

by 왕진 2026. 7. 13.
반응형

 

 

Web Development · MySQL

MySQL INSERT INTO 완전 정리

member 테이블을 만들고 5개 데이터를 삽입하는 전체 흐름 — 컬럼 타입과 INSERT 문법 완전 해설
시작 오늘 다루는 SQL 전체 코드

기존 테이블을 삭제하고, age 컬럼이 추가된 새 member 테이블을 만든 뒤, 5개 레코드를 INSERT하는 흐름이다. 각 컬럼 타입과 INSERT 값이 어떻게 매핑되는지가 핵심이다.

DROP TABLE member; -- 기존 테이블이 있으면 삭제 CREATE TABLE member ( id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, last_name VARCHAR(50), first_name VARCHAR(50), age TINYINT UNSIGNED, PRIMARY KEY (id) ); INSERT INTO member (last_name, first_name, age) VALUES ('ko', 'gildong', 21); INSERT INTO member (last_name, first_name, age) VALUES ('park', 'heedong', 18); INSERT INTO member (last_name, first_name, age) VALUES ('go', 'younghee', 35); INSERT INTO member (last_name, first_name, age) VALUES ('go', 'chulsoo', 10); INSERT INTO member (last_name, first_name, age) VALUES ('park', 'jungja', 28);
실행 후 테이블 데이터 미리보기
id last_name first_name age
1 ko gildong 21
2 park heedong 18
3 go younghee 35
4 go chulsoo 10
5 park jungja 28

→ id는 명시하지 않았는데 AUTO_INCREMENT가 자동으로 1부터 순서대로 부여함

용어 핵심 용어 정리
INSERT INTO테이블에 새 행(레코드)을 추가하는 SQL 명령어. 컬럼 목록과 VALUES를 쌍으로 지정
VALUESINSERT할 실제 데이터 목록. 앞의 컬럼 순서와 정확히 일치해야 함
TINYINT UNSIGNED매우 작은 정수. UNSIGNED면 0~255까지 저장. 나이·등급 등 소규모 숫자에 적합
DROP TABLE테이블 전체 삭제. 데이터도 함께 삭제됨. 복구 불가. 없는 테이블에 실행하면 에러
AUTO_INCREMENTINSERT 시 자동으로 1 증가하는 숫자 생성. id 컬럼에 지정하면 따로 id 값을 안 넣어도 됨
레코드테이블의 한 행(row). INSERT 한 번 = 레코드 1개 추가
컬럼테이블의 열(field). CREATE TABLE에서 이름과 타입을 미리 정의
PRIMARY KEY각 레코드를 유일하게 식별하는 컬럼. 중복 불가, NULL 불가. 보통 id에 지정

1 DROP TABLE — 테이블 재생성 패턴
학습 중 테이블 구조를 바꿀 때 사용하는 패턴

컬럼 구조를 바꾸려면 ALTER TABLE로 컬럼을 수정하거나, DROP TABLE 후 다시 CREATE TABLE하는 방법이 있다. 학습 초기에는 구조 자체를 뜯어고치는 경우가 많아 DROP → CREATE 패턴이 간단하다. 단, 기존 데이터도 함께 사라진다.

DROP TABLE member; -- 테이블이 없으면 Error 1051 발생 -- 테이블이 있을 때만 삭제하려면 DROP TABLE IF EXISTS member; -- 없어도 에러 없이 통과
⚠ DROP TABLE은 INSERT로 넣은 모든 데이터도 함께 삭제된다. 운영 DB에서는 사용 전 반드시 백업.

2 MySQL 정수 타입 비교
TINYINT, MEDIUMINT, INT — 언제 무엇을 쓰나

정수 타입은 저장 가능한 숫자 범위가 다르다. 큰 타입을 쓰면 저장 공간이 더 필요하다. UNSIGNED를 붙이면 음수 범위를 없애고 양수 범위를 두 배로 늘린다.

타입 크기 SIGNED 범위 UNSIGNED 범위 용도
TINYINT 1바이트 -128 ~ 127 0 ~ 255 나이, 등급, 플래그
SMALLINT 2바이트 -32768 ~ 32767 0 ~ 65535 소규모 카운터
MEDIUMINT 3바이트 -8.3M ~ 8.3M 0 ~ 16.7M 회원 ID
INT 4바이트 -2.1B ~ 2.1B 0 ~ 4.2B 대용량 ID
BIGINT 8바이트 -9.2Q ~ 9.2Q 0 ~ 18.4Q 대형 시스템

3 INSERT INTO 문법 해부
컬럼 목록과 VALUES가 반드시 순서 일치해야 한다

INSERT INTO member (last_name, first_name, age) VALUES ('ko', 'gildong', 21)에서 괄호 안 컬럼 순서와 VALUES 괄호 안 값 순서가 정확히 매핑된다. 첫 번째 값은 last_name, 두 번째는 first_name, 세 번째는 age다.

INSERT INTO member
(last_name, first_name, age)
VALUES
('ko', 'gildong', 21)
컬럼 목록 VALUES 실제 저장
last_name 'ko' ko 저장
first_name 'gildong' gildong 저장
age 21 21 저장
id (생략) AUTO_INCREMENT → 자동 1 부여
※ id는 컬럼 목록과 VALUES에서 모두 생략해도 된다. AUTO_INCREMENT가 자동으로 1부터 순서대로 부여한다.

 

반응형

 

4 5개 레코드 삽입 흐름
같은 last_name이 있어도 id가 다르면 별개 레코드
INSERT INTO member (last_name, first_name, age) VALUES ('ko', 'gildong', 21); -- id=1 INSERT INTO member (last_name, first_name, age) VALUES ('park', 'heedong', 18); -- id=2 INSERT INTO member (last_name, first_name, age) VALUES ('go', 'younghee', 35); -- id=3 INSERT INTO member (last_name, first_name, age) VALUES ('go', 'chulsoo', 10); -- id=4 INSERT INTO member (last_name, first_name, age) VALUES ('park', 'jungja', 28); -- id=5 -- 삽입 후 전체 확인 SELECT * FROM member;

5 SELECT — 삽입된 데이터 조회하기
전체 조회 · 조건 조회 · 정렬

INSERT로 넣은 데이터를 꺼낼 때는 SELECT를 사용한다. *는 모든 컬럼을 의미하고, WHERE로 조건을 지정해 원하는 행만 가져올 수 있다. ORDER BY로 정렬 기준을 지정한다.

SELECT * FROM member; -- 전체 행 조회 SELECT * FROM member WHERE last_name = 'go'; -- last_name이 'go'인 행만 SELECT * FROM member WHERE age >= 20; -- 나이 20 이상인 행만 SELECT * FROM member ORDER BY age ASC; -- 나이 오름차순 정렬 SELECT * FROM member ORDER BY age DESC; -- 나이 내림차순 정렬
6 UPDATE와 DELETE — 데이터 수정·삭제
반드시 WHERE 조건과 함께 사용

UPDATE는 기존 레코드의 값을 변경하고, DELETE는 레코드를 삭제한다. 둘 다 WHERE 없이 실행하면 테이블의 전체 데이터가 영향을 받으므로 반드시 조건을 지정해야 한다.

-- id=1인 레코드의 나이를 25로 변경 UPDATE member SET age = 25 WHERE id = 1; -- id=4인 레코드 삭제 DELETE FROM member WHERE id = 4; -- 변경 결과 확인 SELECT * FROM member;
⚠ WHERE 없이 UPDATE나 DELETE를 실행하면 테이블의 모든 데이터가 변경/삭제된다. 반드시 WHERE id = 특정값 처럼 범위를 좁혀서 실행할 것.
SQL CRUD 4가지 명령어 한눈에
역할 SQL 예시
생성 (Create) INSERT INTO INSERT INTO member (...) VALUES (...)
읽기 (Read) SELECT SELECT * FROM member WHERE id = 1
수정 (Update) UPDATE ... SET UPDATE member SET age = 25 WHERE id = 1
삭제 (Delete) DELETE FROM DELETE FROM member WHERE id = 4

7 다중 행 INSERT — 한 번에 여러 레코드 삽입
VALUES를 콤마로 이어서 여러 행을 한 번에 삽입

매번 INSERT INTO를 반복하는 것보다 VALUES 절에 여러 행을 콤마로 연결하면 한 번의 SQL로 다수의 레코드를 삽입할 수 있다. DB와의 통신 횟수를 줄여 성능이 향상된다.

-- 한 번의 INSERT로 5개 레코드 삽입 INSERT INTO member (last_name, first_name, age) VALUES ('ko', 'gildong', 21), ('park', 'heedong', 18), ('go', 'younghee', 35), ('go', 'chulsoo', 10), ('park', 'jungja', 28); -- 결과: Query OK, 5 rows affected
개별 INSERT를 5번 반복하는 것보다 다중 행 INSERT가 약 5배 빠르다. 대량 데이터 삽입 시 이 패턴을 사용한다.

8 SELECT 조건 타입별 활용법
WHERE 조건에 쓸 수 있는 다양한 패턴

데이터를 꺼낼 때 WHERE 조건을 어떻게 쓰느냐에 따라 결과가 달라진다. 문자열은 따옴표로, 숫자는 따옴표 없이 작성한다. 범위 조건과 정렬도 함께 사용할 수 있다.

SELECT * FROM member WHERE id = 3; -- id가 3인 1개 행 SELECT * FROM member WHERE last_name = 'park'; -- 문자열은 따옴표 SELECT * FROM member WHERE age BETWEEN 18 AND 30; -- 범위 조건 SELECT * FROM member WHERE last_name LIKE 'k%'; -- k로 시작하는 성 SELECT * FROM member ORDER BY age ASC LIMIT 3; -- 나이 순 상위 3명
WHERE 패턴 예시 의미
= 값 비교 WHERE id = 3 id가 정확히 3인 행
BETWEEN WHERE age BETWEEN 18 AND 30 18 이상 30 이하 (양쪽 포함)
LIKE WHERE last_name LIKE 'k%' k로 시작하는 문자열 (%=와일드카드)
IN WHERE id IN (1, 3, 5) id가 1, 3, 5 중 하나인 행
IS NULL WHERE age IS NULL age가 NULL인 행 (= NULL은 안 됨)

9 MySQL CLI 자주 쓰는 명령어 레퍼런스
CMD에서 반복해서 쓰는 SQL 명령어 모음
목적 SQL 결과
DB 목록 보기 SHOW DATABASES; 서버의 모든 DB 나열
DB 선택 USE sampledb; 이후 쿼리 대상이 sampledb
테이블 목록 SHOW TABLES; 현재 DB의 테이블 나열
테이블 구조 DESC member; 컬럼명·타입·Key·Extra 출력
전체 조회 SELECT * FROM member; 모든 행·컬럼 출력
행 수 확인 SELECT COUNT(*) FROM member; 총 레코드 수
테이블 비우기 TRUNCATE TABLE member; 데이터 전체 삭제, 구조는 유지

10 자주 하는 실수
실수 증상 해결
컬럼 수와 VALUES 수 불일치 ERROR 1136: Column count doesn't match 컬럼 목록과 VALUES 개수를 동일하게 맞출 것
문자열을 따옴표 없이 입력 ERROR 1054: Unknown column 'ko' 문자열 값은 반드시 작은따옴표('ko')로 감쌀 것
DROP TABLE 후 INSERT 실행 ERROR 1146: Table doesn't exist DROP 후 CREATE TABLE을 다시 실행해야 INSERT 가능
USE sampledb 없이 INSERT ERROR 1046: No database selected USE sampledb; 먼저 실행 후 INSERT
age에 음수(-5) 입력 경고 + 0으로 저장 (UNSIGNED) TINYINT UNSIGNED는 0 이상만 허용. 음수 필요 시 UNSIGNED 제거

핵심 한 줄 요약

INSERT INTO ... VALUES컬럼 목록과 VALUES 순서가 정확히 매핑 — 순서 틀리면 엉뚱한 컬럼에 저장
AUTO_INCREMENTid를 INSERT 시 생략하면 1부터 자동 부여 — 중복 없는 고유 id 보장
TINYINT UNSIGNED0~255 저장 가능한 소형 정수 — 나이처럼 작은 숫자에 적합
DROP TABLE IF EXISTS테이블이 없어도 에러 없이 통과 — 재생성 스크립트에 안전하게 사용
SELECT WHERE / UPDATE SET / DELETECRUD Read/Update/Delete — 반드시 WHERE로 범위 지정, 없으면 전체 영향
다중행 INSERTVALUES (행1), (행2), ... 로 한 번에 여러 레코드 삽입 — 개별 INSERT보다 빠름
WHERE LIKE / BETWEEN / IN패턴·범위·목록 조건 — IS NULL은 = NULL 아님을 주의

Tags

#MySQL INSERT INTO #CREATE TABLE #TINYINT UNSIGNED #VARCHAR #AUTO_INCREMENT #PRIMARY KEY #MySQL 데이터 삽입 #SQL 기초 #MySQL 컬럼 타입 #DROP TABLE #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
MySQL INSERT INTO, CREATE TABLE, TINYINT UNSIGNED, AUTO_INCREMENT, PRIMARY KEY, MySQL 데이터 삽입, SQL 기초, MySQL 컬럼 타입, DROP TABLE, 웹개발
반응형

댓글