WHERE 1 = 2
를 사용하는데, 왜 이렇게 사용하는가였다./* 테이블 생성*/
CREATE TABLE TB_A (
COL_A CHAR(50) NOT NULL PRIMARY KEY,
COL_B VARCHAR2(10) NULL
);
/* 테이블명 변경 (RENAME) >>> https://trustall.tistory.com/8 */
ALTER TABLE TB_A RENAME TO TB_B;
--테이블 구조만 복사하기
CREATE TABLE new_table_name ****AS SELECT * FROM old_table_name ****WHERE 1=2
WHERE 1=2
절은 항상 false인 조건입니다. 즉, 기존 테이블의 어떤 행도 이 조건을 충족하지 않는다는 의미입니다. 결과적으로 새 테이블에는 기존 테이블과 동일한 열 정의가 있지만 'SELECT' 문이 false 조건으로 인해 레코드를 반환하지 않기 때문에 행이 없습니다.
성명서의 내용은 다음과 같습니다.
CREATE TABLE new_table_name
: 지정된 이름을 가진 새 테이블 생성을 시작합니다.
AS SELECT * FROM old_table_name
: old_table_name
과 동일한 열 정의를 사용하여 새 테이블을 생성해야 함을 지정합니다.
WHERE 1=2
: 이 조건은 항상 false이므로 SELECT
문은 빈 세트를 반환합니다. 즉, 데이터는 복사되지 않고 구조만 복사됩니다.
이 기술은 기존 테이블과 동일한 스키마를 가진 새 테이블이 필요하지만 데이터를 복사하고 싶지 않을 때 일반적으로 사용됩니다.
/* [Oracle] 테이블 구조 복사 및 데이터 복사 하기 >>> https://javaoop.tistory.com/94 */
CREATE TABLE TB_A AS SELECT * FROM TB_B;
ALTER TABLE TB_A RENAME COLUMN COL_A TO COL_B; -- 컬럼명 변경
-- 형식
ALTER TABLE 테이블명 MODIFY 컬럼명 새로운_데이터_유형;
-- 예시
ALTER TABLE TB_A MODIFY NEW_COL_A NUMBER(15,0);
COMMENT ON TABLE TB_A IS '테이블 코멘트 내용';
-- 테이블 컬럼 코멘트
COMMENT ON COLUMN TB_A.COL_A IS '컬럼 코멘트 내용';
-- 하나만 삭제
ALTER TABLE TB_A DROP COLUMN COL_A;
-- 여러개 삭제 시 > 괄호가 포함 / 키워드 COLUMN 삭제 / 콤마 추가
ALTER TABLE TB_A DROP (COL_A, COL_B, COL_C);
-- STEP1. 먼저 넣고 싶은 위치 이후에 있는 컬럼을 안보이게 하기
ALTER TABLE TB_A MODIFY COL_A INVISIBLE;
-- STEP2. 넣을 컬럼 추가
ALTER TABLE TB_A ADD(COL_B VARCHAR2(100));
-- STEP3. 이후에 INVISIBLE 했던 COLUMN 추가하기
ALTER TABLE TB_A MODIFY COL_A VISIBLE;
/* NULL 값인 컬럼을 NOT NULL 컬럼으로 속성 변경 */
-- 형식 : ALTER TABLE 테이블명 MODIFY 컬럼명 데이터_타입 NOT NULL;
ALTER TABLE TB_A MODIFY COL_A VARCHAR(10) NOT NULL;
/* 기존 기본키 삭제 */
ALTER TABLE 테이블명 DROP PRIMARY KEY;
/* 새로운 기본키 등록 */
alter table 테이블명
add constraint 기본키명 -- (예 : pk_test)
primary key(기본키1, 기본키2, ..., 기본키 N);
/* 특정 컬럼에 존재하는 데이터 삭제 */
UPDATE TB_A SET COL_A = NULL;