본문 바로가기
Database/Oracle

[SQL-Oracle]DDL-ALTER(변경)

by sukii 2023. 12. 7.
반응형

테이블의 이름 변경
형식) RENAME 기존테이블명 TO 변경테이블명

--BONUS 테이블의 이름을 COMM으로 변경
SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME IN ('BONUS','COMM');
RENAME BONUS TO COMM;
SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME IN ('BONUS','COMM');

 


테이블의 속성 및 제약조건 변경
형식)ALTER TABLE 테이블명 변경옵션
--변경옵션에 의해 테이블 속성의 추가, 삭제, 변경이 가능하여 제약조건은 추가, 삭제 가능

1) USER1 테이블 생성

USER1 테이블 생성 - 회원번호(숫자형), 회원이름(문자형), 전화번호(문자형)
CREATE TABLE USER1(NO NUMBER(4),NAME VARCHAR2(20),PHONE VARCHAR2(15));
DESC USER1;

--USER1 테이블에 행 삽입
INSERT INTO USER1 VALUES(1000,'홍길동','010-1234-5678');
SELECT * FROM USER1;
COMMIT;



2) 테이블 속성 추가  - 기본값 및 컬럼 수준의 제약 조건 부여 가능
형식)ALTER TABLE 테이블명 ADD(컬럼명 자료형[(크기)] [DEFAULT 기본값] [컬럼제약조건]

--USER1 테이블에 주소(문자형) 속성 추가
--테이블에 행이 저장된 상태에서 속성 추가 가능 - 기존 행의 추가 컬럼에는 기본값이 자동 저장
ALTER TABLE USER1 ADD(ADDRESS VARCHAR2(100));
DESC USER1;
SELECT * FROM USER1;
UPDATE USER1 SET ADDRESS='서울시 강남구' WHERE NO=1000;--추가된 컬럼의 컬럼값 변경
SELECT * FROM USER1;
COMMIT;



3) 테이블 속성의 자료형 및 크기 변경 - 기본값 및 컬럼 수준의 제약 조건 부여 가능
형식)ALTER TABLE 테이블명 MODIFY(컬럼명 자료형[(크기)] [DEFAULT 기본값] [컬럼제약조건]

--USER1 테이블 초기화
TRUNCATE TABLE USER1;
SELECT * FROM USER1;

--USER1 테이블의 NO 컬럼의 자료형을 숫자형에서 문자형으로 변경
DESC USER1;
ALTER TABLE USER1 MODIFY(NO VARCHAR2(4));

--USER1 테이블에 행 삽입
INSERT INTO USER1 VALUES('1000','홍길동','010-1234-5678','서울시 강남구');
SELECT * FROM USER1;
COMMIT;

--USER1 테이블의 NO컬럼의 자료형을 문자형에서 숫자형으로 변경
--테이블 속성의 자료형을 변경할 컬럼에 값이 저장되어 있는 경우 자료형 변경 불가능
ALTER TABLE USER1 MODIFY(NO NUMBER(4));--자료형을 변경할 컬럼에 값이 저장되어 있어 에러 발생

--USER1 테이블의 NAME 컬럼 크기를 20BYTE에서 10BYTE로 변경 - 컬럼에 값이 저장되어 있어도 컬럼 크기는 변경 가능
DESC USER1;
ALTER TABLE USER1 MODIFY(NAME VARCHAR2(10));

--USER1 테이블의 NAME 컬럼 크기를 10BYTE에서 5BYTE로 변경
ALTER TABLE USER1 MODIFY(NAME VARCHAR2(5));--컬럼에 저장된 값보다 작게끔 컬럼 크기를 줄일 경우 에러 발생



4) 테이블 속성 삭제 - 테이블 속성에 저장된 모든 컬럼값 삭제
형식)ALTER TABLE 테이블명 DROP COLUMN 컬럼명

--USER1 테이블의 PHONE 컬럼 삭제
DESC USER1;
ALTER TABLE USER1 DROP COLUMN PHONE;
DESC USER1;
SELECT * FROM USER1;

 

 

5) 테이블의 컬럼명 변경
형식)ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 변경컬럼명

--USER1 테이블의 ADDRESS 컬럼명을 ADDR로 변경
DESC USER1;
ALTER TABLE USER1 RENAME COLUMN ADDRESS TO ADDR;
DESC USER1;

 

 

6) 제약조건 추가

6-1) 테이블의 속성 추가 또는 변경시 컬럼 수준의 제약조건 부여 가능(modify 사용)

--USER1 테이블의 NAME 컬럼에 NOT NULL 제약조건 부여
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME='USER1';
ALTER TABLE USER1 MODIFY(NAME VARCHAR2(10) CONSTRAINT USER1_NAME_NN NOT NULL);
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME='USER1';



6-2) ALTER TABLE 명령에 ADD 옵션을 사용하여 테이블 수준의 제약조건 부여 가능(modify보다 add 옵션 사용 권장)
형식) ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] 제약조건

--USER1 테이블의 NO 컬럼에 PRIMARY KEY 제약조건 부여
ALTER TABLE USER1 ADD CONSTRAINT USER1_NO_PK PRIMARY KEY(NO);
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME='USER1';

 

 

7) 제약조건 회수(삭제) - ALTER TABLE 명령에 DROP 옵션을 사용하여 제약조건 회수(삭제) 가능
형식) ALTER TABLE 테이블명 DROP {PRIMARY KEY|CONSTAINT 제약조건명}

--USER1 테이블의 NAME 컬럼에 NOT NULL 제약조건 회수
ALTER TABLE USER1 DROP CONSTRAINT USER1_NAME_NN;
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME='USER1';

--USER1 테이블의 NO 컬럼에 PRIMARY KEY 제약조건 회수
ALTER TABLE USER1 DROP PRIMARY KEY;
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME='USER1';

 

반응형