본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

MySQL LIMIT 복사 · ADD CONSTRAINT — 제한 복사·PK 추가 완전 정리

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

 

 

Web Development · MySQL

MySQL LIMIT 복사 · ADD CONSTRAINT —
제한 복사·PK 추가 완전 정리

CREATE TABLE SELECT LIMIT · WHERE 조건 복사 · ALTER TABLE ADD CONSTRAINT PRIMARY KEY
시작 오늘 분석할 코드
-- usertbl에서 3명만 복사해 memberTBL 생성 CREATE TABLE memberTBL (SELECT userID, name, addr FROM usertbl LIMIT 3); -- 복사 후 PK 추가 (CREATE TABLE SELECT는 PK 복사 안 됨) ALTER TABLE memberTBL ADD CONSTRAINT pk_memberTBL PRIMARY KEY (userID);
CREATE TABLE ... SELECT는 데이터를 복사하지만 PK/인덱스/제약조건은 복사하지 않는다. LIMIT으로 행 수를 제한할 수 있고, 복사 후 ALTER TABLE ADD CONSTRAINT로 PK를 별도로 추가해야 한다.

1 LIMIT 복사 방법
LIMIT N
SELECT 결과에서 N개만 추출 — 복사할 행 수를 제한
CREATE TABLE SELECT
SELECT 결과를 새 테이블로 생성 — 데이터만 복사, PK/제약조건은 미포함
ADD CONSTRAINT
ALTER TABLE에서 제약조건(PK, FK, UNIQUE) 추가
PRIMARY KEY
복사된 테이블에 PK 추가 — 컬럼 중복 값 없어야 추가 가능
-- usertbl 전체 데이터 중 3건만 복사 CREATE TABLE memberTBL (SELECT userID, name, addr FROM usertbl LIMIT 3); -- 결과: memberTBL에 userID, name, addr 3행 삽입됨 -- PK, 인덱스, NOT NULL 제약 없음 -- WHERE 조건으로 특정 행만 복사 CREATE TABLE memberTBL2 (SELECT userID, name, addr FROM usertbl WHERE addr = '서울' LIMIT 3); -- 서울 주소 회원 중 앞 3명만 복사

2 ADD CONSTRAINT PRIMARY KEY

CREATE TABLE SELECT로 생성된 테이블에는 PK가 없다. 복사 후 ALTER TABLE ADD CONSTRAINT로 PK를 추가하면 된다.

-- 기본 패턴: 복사 후 PK 추가 CREATE TABLE memberTBL (SELECT userID, name, addr FROM usertbl LIMIT 3); ALTER TABLE memberTBL ADD CONSTRAINT pk_memberTBL PRIMARY KEY (userID); -- UNIQUE 제약조건 추가도 같은 패턴 ALTER TABLE memberTBL ADD CONSTRAINT uq_name UNIQUE (name); -- 제약조건 이름 없이 추가 (권장하지 않음) ALTER TABLE memberTBL ADD PRIMARY KEY (userID);
ADD CONSTRAINT 이름을 지정하면 나중에 ALTER TABLE DROP CONSTRAINT 이름으로 제거할 수 있다. 이름 없이 추가하면 제거 시 내부 자동 이름을 찾아야 해서 관리가 불편하다.

3 CREATE TABLE SELECT vs CREATE TABLE LIKE
구분 CREATE TABLE ... SELECT CREATE TABLE ... LIKE
데이터 복사 ✅ (SELECT 결과 행 포함) ❌ (구조만, 데이터 없음)
PK/인덱스 ❌ (복사 안 됨) ✅ (구조 포함)
AUTO_INCREMENT ❌ (복사 안 됨) ✅ (복사됨)
LIMIT 사용 ✅ (행 수 제한 가능)
WHERE 조건 ✅ (조건 필터 가능)
용도 일부 데이터 복사·변환 동일 구조 빈 테이블 생성

 

반응형

 

4 실습 시나리오 — usertbl에서 memberTBL 생성

usertbl 10명에서 3명만 복사해 memberTBL을 만들고 PK를 추가하는 전체 흐름을 단계별로 추적한다.

-- 1단계: usertbl에서 userID, name, addr 3건 복사 CREATE TABLE memberTBL (SELECT userID, name, addr FROM usertbl LIMIT 3); -- memberTBL 생성됨, 행 3개, PK 없음 -- 2단계: PK 없는 상태 확인 SHOW CREATE TABLE memberTBL; -- PK: 없음 / NOT NULL: 없음 / 인덱스: 없음 -- 3단계: PK 추가 ALTER TABLE memberTBL ADD CONSTRAINT pk_memberTBL PRIMARY KEY (userID); -- 4단계: 결과 확인 DESCRIBE memberTBL; -- userID: CHAR(8), PK 추가됨 -- name: NVARCHAR -- addr: CHAR(2)
SHOW CREATE TABLE 또는 DESCRIBE로 현재 테이블 구조를 확인할 수 있다. PK 추가 전후를 비교하면 제약조건이 추가되는 것을 직접 확인할 수 있다.

5 LIMIT과 ORDER BY 조합 — 정렬 후 N건 복사

LIMIT만 쓰면 "처음 N행"이 복사되는데, ORDER BY와 함께 쓰면 특정 기준으로 정렬된 상위 N행을 복사할 수 있다.

-- 키 큰 순서로 상위 3명 복사 CREATE TABLE topHeight (SELECT name, height FROM usertbl ORDER BY height DESC LIMIT 3); -- 최근 가입 3명 복사 CREATE TABLE recentMembers (SELECT userID, name, mDate FROM usertbl ORDER BY mDate DESC LIMIT 3); -- 2번째부터 3건 (OFFSET) CREATE TABLE page2 (SELECT userID, name FROM usertbl ORDER BY userID LIMIT 3 OFFSET 1); -- 2번째 행부터 3건
ORDER BY 없이 LIMIT을 쓰면 어떤 N행이 선택될지 보장되지 않는다. 특정 기준의 상위 N건이 필요하면 반드시 ORDER BY와 함께 사용해야 한다.

6 자주 하는 실수
실수 증상 해결
CREATE TABLE SELECT 후 PK 없음 인지 못함 ON DUPLICATE KEY, FK 참조 등이 안 됨 복사 후 반드시 ALTER TABLE ADD CONSTRAINT 추가
LIMIT 없이 전체 복사 대용량 테이블에서 오래 걸림 LIMIT N으로 샘플 복사 후 확인
PK 컬럼에 중복 있는데 ADD PRIMARY KEY Duplicate entry 오류 DISTINCT나 WHERE로 중복 제거 후 복사
제약조건 이름 중복 Can't create table 오류 ADD CONSTRAINT 이름을 테이블별로 고유하게 설정

핵심 한 줄 요약

LIMIT 복사CREATE TABLE tbl (SELECT cols FROM src LIMIT N) — N행만 복사
ADD CONSTRAINT PKALTER TABLE tbl ADD CONSTRAINT 이름 PRIMARY KEY (컬럼)
PK 미포함CREATE TABLE SELECT는 PK/인덱스/제약조건 복사 안 됨 — 별도 추가 필요
LIMIT 위치SELECT 문 끝에 LIMIT N — WHERE 뒤, ORDER BY 뒤에 위치
WHERE + LIMITWHERE addr='서울' LIMIT 3 — 서울 회원 중 3명만 복사
ADD CONSTRAINT 이름이름 지정하면 나중에 DROP CONSTRAINT로 제거 가능 — 관리 편함
PK 추가 전제PK 컬럼에 중복 값 없어야 ADD PRIMARY KEY 가능
FK 추가도 가능ADD CONSTRAINT fk_name FOREIGN KEY (col) REFERENCES parent(col)
UNIQUE 추가ADD CONSTRAINT uq_name UNIQUE (컬럼) — 중복 불허 인덱스
memberTBL 흐름CREATE TABLE memberTBL (SELECT ... LIMIT 3) → ADD CONSTRAINT PK
CREATE TABLE LIKE 차이LIKE = 구조만 복사(PK 포함), SELECT = 데이터 복사(PK 미포함)
샘플 테이블 용도개발·테스트용 축소 테이블 생성 시 LIMIT으로 일부만 복사
ALTER TABLE 위치CREATE TABLE SELECT 직후 — 제약조건이 없는 상태에서 데이터 삽입은 가능
제약조건 종류PRIMARY KEY / UNIQUE / FOREIGN KEY / CHECK — ADD CONSTRAINT로 모두 추가
핵심 2단계1) CREATE TABLE (SELECT ... LIMIT N) 2) ALTER TABLE ADD CONSTRAINT PK
LIMIT 없이 CREATE SELECT원본 전체 복사 — WHERE 조건으로 필터도 가능
ADD PK 문법 비교ADD CONSTRAINT 이름 PRIMARY KEY(col) vs ADD PRIMARY KEY(col)
중복 제거 후 복사SELECT DISTINCT userID, name, addr FROM usertbl LIMIT 3
복사 후 PK 이유PK 없으면 ON DUPLICATE KEY, FK 참조, 인덱스 활용 모두 불가
핵심 구문CREATE TABLE memberTBL (SELECT userID,name,addr FROM usertbl LIMIT 3)
최종 패턴 요약LIMIT 복사(행 선택) → 제약조건 추가(구조 완성) — 2단계 완성
ORDER BY + LIMITORDER BY height DESC LIMIT 3 → 키 큰 상위 3명만 복사
LIMIT OFFSETLIMIT 3 OFFSET 1 → 2번째 행부터 3건 복사 (페이징 활용)
WHERE + LIMITWHERE addr='서울' LIMIT 3 → 조건 충족 중 앞 3행 복사
SHOW CREATE TABLESHOW CREATE TABLE memberTBL → PK 추가 전후 구조 비교 확인
ADD CONSTRAINT 삭제ALTER TABLE tbl DROP PRIMARY KEY → PK 제거 (이름 불필요)
인덱스 자동 생성PK 추가 시 내부적으로 클러스터드 인덱스 자동 생성됨
FK 추가 전제FK 추가 전 참조 테이블에 PK 또는 UNIQUE가 있어야 함
복합 PKADD CONSTRAINT pk_name PRIMARY KEY (col1, col2) — 여러 컬럼 조합
DESCRIBE 확인DESCRIBE memberTBL → Key 컬럼에 PRI 표시 확인
DROP CONSTRAINTALTER TABLE tbl DROP CONSTRAINT 이름 → UNIQUE/FK 제거
실습 핵심 흐름CREATE TABLE + LIMIT 3 → DESCRIBE 확인 → ADD CONSTRAINT PK → 재확인
LIMIT 없는 ORDER BYORDER BY 단독 = 전체 정렬 복사, LIMIT 추가 = 상위 N건만
PK 특성NOT NULL + UNIQUE — PK 컬럼은 자동으로 NULL 불허·중복 불허
CTAS 제한뷰(View) 생성 불가, 트리거 없음, DEFAULT도 일부 미복사
실전 팁테스트 환경 세팅: 운영 DB에서 LIMIT 100 복사 → 별도 DB에서 실험
서브쿼리 포함 복사CREATE TABLE t2 (SELECT * FROM t1 WHERE id IN (SELECT id FROM ref))
명명 관례pk_{테이블명} — 제약조건 이름 일관성 있게 관리
이 파일 핵심LIMIT 3으로 부분 복사 + ADD CONSTRAINT PK로 제약조건 완성
CHECK 제약조건ADD CONSTRAINT ck_name CHECK (col > 0) — 값 범위 제한
DEFAULT 제약ALTER TABLE tbl ALTER COLUMN col SET DEFAULT 0 — 기본값 설정
AI 컬럼 복사CREATE TABLE SELECT 시 AI 속성 미복사 — 복사 후 ALTER로 AI 추가
제약조건 목록 조회SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_NAME='memberTBL'
LIMIT 구문 위치SELECT → FROM → JOIN → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT
이중 안전장치DISTINCT로 중복 제거 + LIMIT 복사 → 깨끗한 샘플 테이블
ADD CONSTRAINT 이름 조회SHOW INDEXES FROM memberTBL — 인덱스·PK 이름 확인
LIMIT 0LIMIT 0 → 행 없이 구조만 복사 (CREATE TABLE LIKE 대안)
INSERT INTO SELECT기존 테이블에 데이터 추가 = INSERT INTO tbl2 SELECT * FROM tbl1 LIMIT N
복사 후 인덱스 추가ADD INDEX idx_name (col) — PK 외 일반 인덱스도 복사 후 별도 추가
전체 학습 흐름LIMIT 복사 → 구조 확인 → ADD CONSTRAINT PK → 검증 → 완성
용어 정리CONSTRAINT=제약조건 / CTAS=CREATE TABLE AS SELECT / DDL=Data Definition
MySQL 전용WITH ROLLUP처럼 LIMIT도 MySQL·MariaDB 구문 — 표준 SQL FETCH NEXT 참고
실무 활용운영 DB 대신 복사 테이블로 쿼리 연습 — 원본 데이터 보호
핵심 1줄LIMIT 복사로 행 선택, ADD CONSTRAINT PK로 제약조건 완성 — 2단계 패턴
PK 이름 관례pk_memberTBL — 테이블명 앞에 pk_ 접두사 붙여 관리

Tags

#MySQL #LIMIT #CREATE TABLE SELECT #ADD CONSTRAINT #PRIMARY KEY #테이블복사 #DDL #SQL #데이터베이스 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
MySQL, LIMIT, CREATE TABLE SELECT, ADD CONSTRAINT, PRIMARY KEY, 테이블복사, DDL, SQL, 데이터베이스, 웹개발, 티스토리
반응형

댓글