본문 바로가기
DataBase

[SQL]칼럼 제거

by 바까 2021. 9. 25.
반응형
--컬럼 제거
기존에 존재하는 테이블에 컬럼을 삭제 할 수 있다.


--실습준비
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

댓글