성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و

Oracle SQL Developer 테이블 수정하기 (새 컬럼 추가, 삭제, 변경) 본문

백엔드개발/DATABASE

Oracle SQL Developer 테이블 수정하기 (새 컬럼 추가, 삭제, 변경)

hyemi_flora 2023. 11. 7. 11:02

1102 수업내용_

    # 테이블에 새 컬럼 추가하기

    - ALTER TABLE 테이블명 ADD (컬럼명 컬럼타입 제약조건, ...);

    - 컬럼이 추가되면 기존에 존재하던 행들은 해당 컬럼값이 null 된다.

    - 컬럼 NOT NULL 컬럼을 추가할 때는 기본값을 반드시 설정해야 한다.

 

 

ALTER TABLE coffee ADD (

    coffee_taste VARCHAR2(20),

    coffee_satis NUMBER(2, 1)

);

 

SELECT * FROM coffee;

 

컬럼 삭제하기

ALTER TABLE 테이블명 DROP COLUMN 컬럼명;

 

 

 

 

ALTER TABLE coffee ADD (

    coffee_taste VARCHAR2(20)

        CONSTRAINT coffee_taste_nn NOT NULL,

    coffee_satis NUMBER(2, 1)

);

오류 보고 -

ORA-01758: table must be empty to add mandatory (NOT NULL) column

01758. 00000 -  "table must be empty to add mandatory (NOT NULL) column"

*Cause:   

*Action:

 

>> 기존에 있는 컬럼들에 null값이 있기 때문에 추가가 안됨

>>  NOT NULL 컬럼을 추가할 때는 기본값을 반드시 설정해야하기때문에 DEFAULT 사용

 

ALTER TABLE coffee ADD (

    coffee_taste VARCHAR2(20) DEFAULT 'Bitter'

        CONSTRAINT coffee_taste_nn NOT NULL,

    coffee_satis NUMBER(2, 1)

);

 

 

 

 

 

-- countries countries2로 복사할때 기본키 제약조건은 함께 복사되지 않는다.

CREATE TABLE countries2 AS (SELECT * FROM countries);

-- 함께 복사되는 제약조거는 컬럼에 딸려있는 not null 뿐일것이다. (check도 될 수도 ..?)

DESC countries2;

SELECT * FROM user_constraints WHERE table_name ='COUNTRIES2';

 

-- countries2.country_id를 외래키로 가져다 쓰기 위해 기본키 제약조건을 추가하였다.

ALTER TABLE countries2 MODIFY(

    country_id CHAR(2)

        CONSTRAINT countries2_c_id_pk PRIMARY KEY

);

 

ALTER TABLE coffee ADD(

    country_id CHAR(2)

        CONSTRAINT coffee_c_id_fk REFERENCES countries2(country_id)

);

 

UPDATE coffee SET country_id = 'AR';

 

 

 

 

 

-- 테이블 컬럼 이름 변경하기 : ALTER TABLE 테이블명 RENAME COLUMN 원래이름 TO 바꿀이름;

ALTER TABLE coffee RENAME COLUMN coffee_satis TO coffee_satisfaction;

 

-- 테이블 제약조건 이름 변경하기 : ALTER TABLE 테이블명 RENAME CONSTRAINT 원래 TO 바꿀;

ALTER TABLE coffee RENAME CONSTRAINT coffee_price_positive TO coffee_price_pos;

SELECT * FROM user_constraints WHERE table_name ='COFFEE';

 

-- 테이블 이름 변경하기 : RENAME 테이블명 TO 바꿀이름;

RENAME countries2 TO countries3;

--> 외래키로 참조하고 있던 부모 테이블의 이름을 바꿔도 DB가 알아서 동기화 (파란색)

--> 제약조건명은 동기화 해주지 않음으로 직접 수정해야한다.(빨간색)

 

ALTER TABLE countries3 RENAME CONSTRAINT countries2_c_id_pk TO countries3_c_id_pk;

 

 

바뀐것을 확인 있다.