1.테이블 수정
▶컬럼 1개 추가
ALTER TABLE 테이블명
ADD 컬럼명 데이터타입;
ALTER TABLE SALESMAN1
ADD DNO NUMBER(2);
▶컬럼 M개 추가
ALTER TABLE SALESMAN1
ADD (JUMIN CHAR(14),ZIP CHAR(7));
ALTER TABLE 테이블명
ADD (컬럼명1 데이터타입1, 칼럼명2 데이터타입2, ….., 칼럼명M 데이터타입M);
▶기본값으로 DEFAULT에 있는 값을 넣어줌
ALTER TABLE 테이블명
ADD 컬럼명 데이터타입 DEFAULT(값);
ALTER TABLE SALESMAN1
ADD BIGO VARCHAR(10) DEFAULT('AA');
▶제약조건
ALTER TABLE 테이블명
ADD 컬럼명 데이터타입 CONSTRAINT 제약조건명 제약조건 (조건);
ALTER TABLE SALESMAN1
ADD(MARRIAGE CHAR(8) CONSTRAINT SALESMAN1_MARRIAGE_CK
CHECK (MARRIAGE IN ('SINGLE','MARRIED'))); ▶CHECK KEY
ALTER TABLE SALESMAN1
ADD CONSTRAINT SALESMAN1_PNO_PK PRIMARY KEY(PNO); ▶PRIMARY KEY 추가
최악의 DB 모델링
◀L테이블 : NULL값이 들어간 상태에서 데이터 추가
◀계단형 테이블
컬럼수정
▶MODIFY
▶데이터가 없을때
○문자↔숫자↔날짜
○사이즈 확대,축소
▶데이터가 있을때
○CHAR↔VARCHAR2만 가능
○사이즈 확대만 가능(저장되어 있는 데이터보다 작게는 불가)
ALTER TABLE 테이블명
MODIFY 컬럼명 수정데이터타입;
ALTER TABLE MANAGER1
MODIFY PNAME VARCHAR2(16);
2.삭제(DROP)
▶DROP(컬럼,제약조건 삭제)
▶테이블은 그대로 있는 상태에서 제약조건이나 컬럼을 삭제
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건이름/제약조건;
ALTER TABLE MANAGER1
DROP CONSTRAINT MANAGER_PNO_PK;
ALTER TABLE MANAGER1
DROP PRIMARY KEY;
ALTER TABLE DIVISION
DROP CONSTRAINT DIVISION_DNO_PK; ▶고유/기본 키가 외부 키에 의해 참조되었습니다
▶참조키 삭제
ALTER TABLE PERSONNEL
DROP PERSONNEL_PNO_PK;
ALTER TABLE DIVISION
DROP PRIMARY KEY;
▼수정
ALTER TABLE DIVISION
DROP PRIMARY KEY CASCADE;
▶컬럼삭제
ALTER TABLE 테이블명
DROP COLUMN 컬럼명;
ALTER TABLE SALESMAN1
DROP COLUMN MARRIAGE;
▶SET UNUSED : 삭제는 하지 않지만 사용자에게 보여주지 않음
ALTER TABLE 테이블명
SET UNUSED COLUMN 컬럼명;
ALTER TABLE SALESMAN1
SET UNUSED COLUMN DNO;
SET UNUSED 확인
SELECT * FROM DBA_UNUSED_COL_TABS;
▶테이블 삭제
DROP TABLE 테이블명;
DROP TABLE MANAGER1;
▶휴지통
휴지통 확인
SELECT * FROM RECYCLEBIN;
삭제된 내용 확인
SELECT * FROM "BIN$J4KDdTJiRK2HS6VIZUEBrA==$0";
휴지통 복원
FLASHBACK TABLE 테이블명 TO BEFORE DROP;
FLASHBACK TABLE "쓰레기통안의 테이블명" TO BEFORE DROP;
FLASHBACK TABLE MANAGER1 TO BEFORE DROP;
FLASHBACK TABLE "BIN$J4KDdTJiRK2HS6VIZUEBrA==$0" TO BEFORE DROP;
휴지통 비우기
PURGE RECYCLEBIN;
바로 삭제
DROP TABLE 테이블명 PURGE;
DROP TABLE MANAGER1 PURGE;
▶TRUNCATE / DELETE의 차이(레코드삭제)
DELETE : 로그파일 저장O. 속도가 느림. ROLLBACK 가능
DELETE DIVISION;
TRUNCATE : 로그파일 저장X. 속도가 빠름. ROLLBACK 불가 → RECOVERY 해야함
TRUNCATE TABLE DIVISION;
3.RENAME, COMMENT
▶RENAME
RENAME 테이블명 TO 변경테이블명;
RENAME PAY3000 TO HIGHPAY;
▶COMMENT
SELECT * FROM USER_TAB_COMMENTS; → COMMENT 확인
COMMENT 추가
COMMENT ON TABLE 테이블명
IS ‘COMMENT 내용’;
COMMENT ON TABLE HIGHPAY
IS '연봉 많이 받는 사람...개부럽';
COMMENT 지움
COMMENT ON TABLE HIGHPAY
IS '';
컬럼 주석
COMMENT ON TABLE 테이블명.POSITION
IS 'COMMENT 내용';
COMMENT ON TABLE BUSEO.POSITION
IS '부서 위치';
4.DCL(GRANT/REVOKE)
▶GRANT : USER나 OBJECT에 권한을 부여할때 사용
▶REVOKE: USER나 OBJECT에 권한을 회수할때 사용
▶권한의 종류
1.SYSTEM 권한
○DATABASE의 OBJECT를 생성(CREATE),수정(ALTER),삭제(DROP)를 할 수 있는 권한
○DBA가 USERS에게 부여
2.OBJECT 권한
○OBJECT의 내용을 조작(추가(INSERT),변경(UPDATE),삭제(DELETE),검색(SELECT))할 수 있는 권한
○USER가 USERS에게 부여
▶SYSTEM권한검색
SELECT * FROM SYSTEM_PRIVILEGE_MAP;
▶권한부여(GRANT)
GRANT CREATE USER TO 사용자;
GRANT CREATE USER TO KIM;
GRANT CREATE SESSION,RESOURCE,UNLIMITED TABLESPACE TO TEST;
→ CREATE SESSION을 CONNECT로 변경 가능
→ 로그인 : CREATE SESSION
→ DML : RESOURCE
▶권한회수(REVOKE)
REVOKE RESOURCE FROM 사용자;
REVOKE RESOURCE FROM TEST;
REVOKE CREATE SESSION FROM TEST;
SYSTEM 권한
▶USER 생성 → SYS에서 가능
CREATE USER 사용자
IDENTIFIED BY 비밀번호
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
CREATE USER TEST
IDENTIFIED BY TEST
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
▶DB의 정보 확인
SELECT * FROM DBA_USERS;
OBJECT권한 : USER가 USERS에게 권한을 주기때문에 KIM에서 실행
GRANT 권한1, 권한2… ON 테이블명 TO 사용자;
GRANT SELECT,INSERT,DELETE ON DIVISION1 TO PARK;
REVOKE 권한1, 권한2… ON 테이블명 FROM 사용자;
REVOKE SELECT,INSERT,DELETE ON DIVISION1 FROM PARK;
▶SYS에서 실행시
GRANT SELECT ON 스키마.테이블명 TO PUBLIC; → 스키마 : 사용자(USER)
GRANT SELECT ON KIM.BUSEO TO PUBLIC;
→ PUBLIC : 모두에게 권한 부여
PUBLIC으로 권한 부여시 PUBLIC으로만 권한 회수 가능
▶권한 확인
SELECT * FROM USER_TAB_PRIVS_MADE;
5.ROLL
ROLE(역할) : 권한을 줄 때 사용
1.ROLE 만들기
CREATE ROLE 롤이름;
2.GRANT 명령어로 ROLE에 권한 부여
GRANT 권한 TO 롤;
3.ROLE을 USER에게 GRANT 명령어로 권한 부여
GRANT 롤 TO 사용자;
CREATE ROLE MANAGER;
GRANT CREATE SESSION,CREATE TABLE,UNLIMITED TABLESPACE TO MANAGER;
GRANT MANAGER TO PARK,TEST;
권한회수
REVOKE MANAGER TO PARK;
▶OBJECT권한도 ROLE에 사용 가능
CREATE ROLE KIMOBJ;
GRANT SELECT,INSERT,DELETE ON KIM.DIVISION1 TO KIMOBJ;
GRANT KIMOBJ TO TEST;
▶ROLE에 부여된 SYSTEM 권한 확인
SELECT * FROM ROLE_SYS_PRIVS
WHERE ROLE=’롤’
▶ROLE에 부여된 TABLE 권한 확인
SELECT * FROM ROLE_TAB_PRIVS;
WHERE TABLE_NAME='테이블';
▶현재 USER에게 부여된 ROLE 권한 확인
SELECT * FROM USER_ROLE_PRIVS;
▶현재 USER가 소유하고 있는 OBJECT
SELECT * FROM USER_TAB_PRIVS_MADE;
▶현재 USER에게 소유된 OBJECT의 컬럼정보 확인
SELECT * FROM USER_TAB_PRIVS_MADE;
'STUDY > ORACLE' 카테고리의 다른 글
Oracle 9일차(1)-INDEX, SEQUENCE (0) | 2019.01.18 |
---|---|
Oracle 8일차 (0) | 2019.01.16 |
Oracle 6일차(2)-문제 (0) | 2019.01.16 |
Oracle 6일차(1)-UPDATE, DELETE, CONSTRAINTS, TRANSACTION, DDL (0) | 2019.01.16 |
Oracle 5일차(2)-문제 (0) | 2019.01.16 |
댓글