반응형
--컬럼 제거
기존에 존재하는 테이블에 컬럼을 삭제 할 수 있다.
--실습준비
DROP VIEW BOOK_INFO;
DROP TABLE BOOKS;
DROP TABLE PUBLISHERS;
DROP TABLE CATEGORIES;
CREATE TABLE PUBLISHERS (
PUBLISHER_ID SERIAL PRIMARY KEY
, NAME VARCHAR NOT NULL
);
SELECT * FROM PUBLISHERS;
CREATE TABLE CATEGORIES (
CATEGORY_ID SERIAL PRIMARY KEY
, NAME VARCHAR NOT NULL
);
SELECT * FROM CATEGORIES;
CREATE TABLE BOOKS (
BOOK_ID SERIAL PRIMARY KEY
, TITLE VARCHAR NOT NULL
, ISBN VARCHAR NOT NULL
, PUBLISHED_DATE DATE NOT NULL
, DESCRIPTION VARCHAR
, CATEGORY_ID INT NOT NULL
, PUBLISHER_ID INT NOT NULL
, FOREIGN KEY (PUBLISHER_ID) REFERENCES PUBLISHERS (PUBLISHER_ID)
, FOREIGN KEY (CATEGORY_ID) REFERENCES CATEGORIES (CATEGORY_ID)
);
SELECT * FROM books;
CREATE VIEW BOOK_INFO AS SELECT
B.BOOK_ID,
B.TITLE,
B.ISBN,
B.PUBLISHED_DATE,
P.NAME
FROM
BOOKS B
, PUBLISHERS P
WHERE P.PUBLISHER_ID = B.PUBLISHER_ID
ORDER BY TITLE;
SELECT * FROM BOOK_INFO;
SELECT * FROM BOOKS;
--books 테이블은 자식 테이블이므로 category_id 칼럼은 제거 가능
ALTER TABLE BOOKS DROP COLUMN CATEGORY_ID;-->catetory_id의 fk도 함게 삭제
--publisher_id 컬럼을 제거하고자 하는 경우 에러 발생
--해당 칼럼은 book_info 뷰에서 참조하고 있기 때문
ALTER TABLE BOOKS DROP COLUMN PUBLISHER_ID;
SQL Error [2BP01]: 오류: 기타 다른 개체들이 이 개체에 의존하고 있어, publisher_id 칼럼(books 테이블 의) 삭제할 수 없음
Detail: book_info 뷰 의존대상: publisher_id 칼럼(books 테이블 의)
Hint: 이 개체와 관계된 모든 개체들을 함께 삭제하려면 DROP ... CASCADE 명령을 사용하십시오
;
--해결방법 : cascade 옵션을 줘서 삭제
ALTER TABLE BOOKS DROP COLUMN PUBLISHER_ID CASCADE;
SELECT * FROM BOOK_INFO; --컬럼 삭제에는 성공했지만 book_info 뷰도 같이 삭제됨
SQL Error [42P01]: 오류: "book_info" 이름의 릴레이션(relation)이 없습니다
Position: 15
;
--동시에 여러개의 칼럼도 삭제가능
ALTER TABLE BOOKS
DROP COLUMN ISBN,
DROP COLUMN DESCRIPTION;
반응형
'DataBase' 카테고리의 다른 글
[SQL]컬럼 이름 변경 (0) | 2021.09.25 |
---|---|
[SQL]컬럼 데이터 타입 변경 (0) | 2021.09.25 |
[SQL]칼럼 추가 (0) | 2021.09.25 |
[SQL]테이블 이름 변경 (0) | 2021.09.25 |
[SQL]테이블 구조 변경 (0) | 2021.09.25 |
댓글