DATABASE

[Database] where 1=2, where 1=1을 사용하여 테이블 복사하기

예나부기 2022. 5. 23.

DB 쿼리문을 보다 보면 where절에 1=2, 1=1 등을 사용하는 것을 심심찮게 볼 수 있다.

 

쿼리문의 조건절에 where 1=1을 쓴다면, 말 그대로 항상 참일 것이고, (true for all rows)

where 1=2를 쓴다면, 항상 거짓일 것이다.(false for all rows)

 

where 1=2 사용하여 테이블 구조만 복사하기

CREATE TABLE [생성할 테이블명] AS SELECT * FROM [복사할 테이블명] WHERE 1=2;

위와 같은 쿼리문을 사용할 경우, 컬럼명과 데이터 타입이 동일한 테이블을 생성하지만,

key, constraint, 테이블의 데이터는 복사하지 않는다. (1=2인 data는 존재하지 않기 때문)

(중요한 점! 기본키, 외래키가 설정되어 있는 경우 이는 가져오지 않는다는 뜻이다.

auto_increment가 설정되어 있는 경우에도 가져오지 않는다. 오직 동일 이름/동일 데이터 타입의 컬럼만 가져온다.)

 

 

 

where 1=1 사용하여 테이블 구조/데이터 복사하기

CREATE TABLE [생성할 테이블명] AS SELECT * FROM [복사할 테이블명] WHERE 1=1;

위와 같은 쿼리문을 사용할 경우, 테이블의 구조는 물론 데이터도 복사하여 새로운 테이블을 생성한다.

그러나 역시, key, constraint는 복사해 오지 않는다.

아래 쿼리문 돌렸을 때와 동일한 결과값을 얻을 수 있다. (테이블 복사 - 아래 예시는 mysql)

create table [생성할 테이블명] select * from [복사할 테이블명]

 

댓글