Beny's Study
03. DDL(Data Definition Language)-ALTER,DROP 본문
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차 변형 등을 할 경우
민, 형사상 법적 조치 등 저작권법에 의거하여 처벌 받을 수 있습니다."