Beny's Study

03. DDL(Data Definition Language)-ALTER,DROP 본문

[DB]/03. DDL &DML

03. DDL(Data Definition Language)-ALTER,DROP

76beny 2022. 5. 11. 14:52
 

DDL

데이터 정의 언어로 객체(OBJECT)를 만들고(CREATE), 수정하고(ALTER), 삭제(DROP)하는 구문을 말함

■ ALTER : 테이블이나 각종 제약사항들 등의 Object를 수정하는 명령어

           테이블 수정(컬럼명 수정, 컬럼 추가, 컬럼 삭제) 제약사항 추가,수정,삭제

■ DROP : 데이터베이스 객체를 삭제하는 구문

DROP TABLE TBL_ALTER_TEST;

CREATE TABLE TBL_ALTER_TEST(
    user_no NUMBER PRIMARY KEY,
    user_id VARCHAR2(20),
    user_name VARCHAR2(20)
);

SELECT * FROM TBL_ALTER_TEST;

INSERT INTO TBL_ALTER_TEST VALUES('1','test_id1','홍길동'); 
INSERT INTO TBL_ALTER_TEST VALUES('2','test_id2','김길동');
INSERT INTO TBL_ALTER_TEST VALUES('3','test_id3','최길동');


-- 컬럼 추가하기 (주소 정보)
ALTER TABLE TBL_ALTER_TEST ADD(user_addr VARCHAR2(100)); 
-- DDL(CREATE, ALTER, DTOP) Commit이 필요하지 않음!!

INSERT INTO TBL_ALTER_TEST VALUES('4','test_id4','황길동','서울시 강남구 역삼동 어딘가');



-- 컬럼 추가하기 (제약사항과 함께 Not null 제외) 
ALTER TABLE TBL_ALTER_TEST ADD(USER_PW VARCHAR2(50) UNIQUE);
INSERT INTO TBL_ALTER_TEST VALUES('5','test_id5','박길동','서울시 강남구 도곡동 ','TEST');



-- 제약사항만 추가하기
ALTER TABLE TBL_ALTER_TEST ADD CONSTRAINT UQ_USER_ID UNIQUE(user_id);
-- 만일 UNIQUE 하지 않았으면 제약이 걸리지 않음!
INSERT INTO TBL_ALTER_TEST VALUES('6','test_id6','홍길동','서울시 강남구 도곡동 ','TEST2');
ALTER TABLE TBL_ALTER_TEST ADD CONSTRAINT UQ_USER_NAME UNIQUE(user_name);


-- 제약사항 삭제하기 - DROP
ALTER TABLE TBL_ALTER_TEST DROP CONSTRAINT UQ_USER_ID;



-- 컬럼명 수정하기
ALTER TABLE TBL_ALTER_TEST RENAME COLUMN user_addr to user_addr2222;



-- 제약사항 이름 수정하기
ALTER TABLE TBL_ALTER_TEST RENAME CONSTRAINT UQ_USER_ID to UQ_USER_ID2;

SELECT * FROM user_constraints;

 

 

ALTER : 컬럼추가

ALTER TABLE DEPT_COPY
ADD (CNAME VARCHAR2(20));

ALTER TABLE DEPT_COPY
ADD (LNAME VARCHAR2(40) DEFAULT ‘한국’);

 

ALTER : 제약조건추가

ALTER TABLE DEPT_COPY
ADD CONSTRAINT DCOPY_DID_PK PRIMARY KEY(DEPT_ID);
ADD CONSTRAINT DCOPY_DTITLE_UNQ UNIQUE(DEPT_TITLE); 
MODIFY LNAME CONSTRAINT DCOPY_LNAME_NN NOT NULL;

SELECT UC.CONSTRAINT_NAME,
	UC.CONSTRAINT_TYPE, 
	UC.TABLE_NAME, 
	UCC.COLUMN_NAME,
	UC.SEARCH_CONDITION

FROM USER_CONSTRAINTS UC
JOIN USER_CONS_COLUMNS UCC ON (UC.CONSTRAINT_NAME= UCC.CONSTRAINT_NAME)
WHERE UC.TABLE_NAME = ‘DEPT_COPY’;

 

ALTER : 컬럼수정

ALTER TABLE DEPT_COPY MODIFY DEPT_ID CHAR(3) MODIFY DEPT_TITLE VARCHAR(30)
MODIFY LOCATION_ID VARCHAR2(2) MODIFY CNAME CHAR(20)
MODIFY LNAME DEFAULT '미국';

 

 

ALTER : 컬럼삭제

ALTER TABLE DEPT_COPY
DROP COLUMN DEPT_ID;

■ 오류발생하는 경우

 

CREATE TABLE TB1(
	PK NUMBER PRIMARY KEY,
	FK NUMBER REFERENCES TB1,
	COL1 NUMBER,
	CHECK(PK > 0 AND COL1 > 0)
);

ALTER TABLE TB1
DROP COLUMN PK;
* 컬럼 삭제 시 참조하고 있는 컬럼이 있다면 컬럼 삭제 불가능

ALTER TABLE TB1
DROP COLUMN PK CASCADE CONSTRAINT;

 

ALTER : 제약조건 삭제

ALTER TABLE DEPT_COPY
DROP CONSTRAINT DCOPY_DID_PK
DROP CONSTRAINT DCOPY_DTITLE_UNQ
MODIFY LNAME NULL;

 

ALTER : 컬럼이름변경

ALTER TABLE DEPT_COPY
RENAME COLUMN DEPT_TITLE TO DEPT_NAME;

 

ALTER : 제약조건이름변경

ALTER TABLE USER_FOREIGNKEY
RENAME CONSTRAINT SYS_C007211 TO UF_UP_NN;

ALTER TABLE USER_FOREIGNKEY
RENAME CONSTRAINT SYS_C007212 TO UF_UN_PK;

ALTER TABLE USER_FOREIGNKEY
RENAME CONSTRAINT SYS_C007213 TO UF_UI_UQ;

ALTER TABLE USER_FOREIGNKEY
RENAME CONSTRAINT SYS_C007214 TO UF_GC_FK;

SELECT UC.CONSTRAINT_NAME 이름,
	UC.CONSTRAINT_TYPE 유형, 
	UCC.COLUMN_NAME 컬럼명,
	UC.R_CONSTRAINT_NAME 참조, 
	UC.DELETE_RULE 삭제규칙

FROM USER_CONSTRAINTS UC
JOIN USER_CONS_COLUMNS UCC ON (UC.CONSTRAINT_NAME= UCC.CONSTRAINT_NAME)
WHERE UC.TABLE_NAME = ‘USER_FOREIGNKEY’;

 

 

ALTER : 테이블 이름변경

LTER TABLE DEPT_COPY
RENAME TO DEPT_TEST;


또는

RENAME DEPT_COPY TO DEPT_TEST;

 

 

DROP

■ 제약 조건이 있는 경우 : CASCADE CONSTRAINT를 사용 

제약조건 없으면 위의 문구 삭제

DROP TABLE DEPT_TEST CASCADE CONSTRAINT;

 

 


"본 인터넷 사이트 내의 모든 이미지, 문구, 콘텐츠, 내용 등에 대한 저작권은 76beny에게 있습니다.

이를 무단으로 도용, 복사, 전재, 재배포, 2차 변형 등을 할 경우

민, 형사상 법적 조치 등 저작권법에 의거하여 처벌 받을 수 있습니다."