ON/Oracle

[Oracle] 복습

박도비 2023. 6. 6. 01:10
728x90
분류 용도 명령어
DQL 데이터 검색 SELECT
DML 데이터 조작 
추가 삭제 수정 
INSERT, UPDATE, DELETE
DDL 데이터 정의 
데이터 키우거나 줄이거나 컬럼 이름을 바꾸는 것 
CREATE, DROP, ALTER
DCL  데이터 제어 
권한을 주는 것
GRANT, REVOKE
TCL 트랙젝션 제어  COMMIT, ROLLBACK

 

📌 DQL

데이터 검색 (조회)

[SELECT 컬럼명 FROM 테이블]


📌 DML

1) INSERT  (데이터 추가)

INSERT INTO 테이블명 VALUES(데이터,데이터,...) 

📝 테이블에 모든 컬럼에 대한 값을  INSERT 할때 사용 

      INSERT 하고자 하는 컬럼이 모든 컬럼인 경우 컬럼명 생략 가능
      단, 컬럼의 순서를 지켜서 VALUES에 값을 기입해야함 

INSERT INTO DEPARTMENT2 VALUES('D1','기획팀', 'L1');

 

INSERT INTO 테이블명 (컬럼명,컬럼명,컬럼명,....) VALUES(데이터,데이터,...) 

📝  테이블에 내가 선택한 컬럼에 대한 값만 INISERT할때 사용 

      선택안된 컬럼값은 NULL이 됨

INSERT INTO DEPARTMENT2(DEPT_ID,DEPT_TITLE,LOCATION_ID)VALUES('D0','경리부','L2');

 

2) 데이터 수정 UPDATE 
UPDATE 테이블명 SET 컬럼명 = 바꿀값 [WHERE 컬럼명 비교연산자 비교값];

📝 조건절을 설정하지 않고 UDPATE 구문 실행 시 모든 행의 컬럼 값이 변경 

      만일, UPDATE 할 때 컬럼 여러개를 동시에 변경할 경우에는 아래와 같이 작성해주면 된다.

UPDATE 테이블명SET (컬럼명, 컬럼명) = (SELECT 컬럼명, 컬럼명 FROM 테이블명 WHERE 조건)

 

3) 데이터 삭제 DELETE
DELETE FROM 테이블명 WHERE 조건 설정 

📝WHWERE 조건을 설정하지 않으면 모든 행이 다 삭제됨 

     2개 이상 삭제 하고 싶다면, AND로 이어 주기! 


📌 TCL(트랜젝션)

- 데이터 변경 사항을 묶어 하나의 트랜젝션에 담아 처리함
- 트렌젝션의 대상이 되는 데이터 변경 사항 : INSERT,UPDATE,DELETE (DML)

 

1) COMMIT

📝 메모리 버퍼(트랜젝션)에 입시 저장된 변경사항을 DB에 반영 

 

2) ROLLBACK

📝 메모리 버퍼(트렌젝션)에 임시 저장된 데이터 변경 사항을 삭제하고 

      마지막 COMMIT 상태로 돌아간다. 

 

2) SAVEPOINT

📝 메모리버퍼(트랜젝션)에 저장 지점을 정의 하여 ROLLBACK 수행 시 

      전체 작업을 삭제하는 것이 아닌 저장지점까지만 일부 ROLLBACK

    [SAVEPOINT 사용법]
    
    SAVEPOINT 포인트명 1;
    ...
    SAVEPOINT 포인트명 2;    
    ...
    ROLLBACK TO 포인트명 1; -> 포인트 1 지점까지 데이터 변경사항 삭제

📌 DCL  (  ROLLBACK 대상 아님!)

 

1) CREATE

📝 테이블이나 인덱스, 뷰 등 다양한 데이터베이스 객체를 생성하는 구문

      테이블로 생성된 객체는 DROP구문을 통해 제거할 수 있음 

    CREATE TABLE 테이블명 (

        컬럼명 자료형(크기), 

        컬럼명 자료형(크기),

        ...);

  [ 자료형 ]  
  NUMBER : 숫자형(정수, 실수)
  CHAR(크기) : 고정길이 문자형 (2000BYTE) 
        -> ex) CHAR(10) 컬럼에 'ABC' 3BYTE 문자열만 저장해도 10BYTE 저장공간을 모두 사용. 
        
   VARCHAR2(크기) : 가변길이 문자형 (4000 BYTE)
        -> ex) VARCHAR2(10) 컬럼에 'ABC' 3BYTE 문자열만 저장하면 나머지 7BYTE를 반환함.
        
   DATE : 날짜 타입
   BLOB : 대용량 이진 데이터 (4GB)
   CLOB : 대용량 문자 데이터 (4GB)

! 주민등록번호 데이터 타입은 NUMBER이 아닌 ! CHAR 형식으로 생성해야한다. ( 앞에 0이 있으면 사라지는 문제점 발생) 

 

1) CONSTRAINTS

📝 사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약

      중복 최소화 / NULL 최소화 지향

 

🔎 1.NOT NULL 

-  해당 컬럼에 반드시 값이 기록되어야 하는 경우 사용

-  삽입 / 수정 시 NULL값을 허용하지 않도록 컬럼레벨에서 제한

 

 

🔎 2. UNIQUE 

① 제약조건

- 컬럼에 입력 값에 대해서 중복을 제한하는 제약조건
- 컬럼레벨에서 설정가능, 테이블 레벨에서 설정 가능
- 단, UNIQUE 제약조건이 설정된 컬럼에 NULL값은 중복 삽입 가능 

 

② 복합키 
- 두개 이상의 컬럼을 묶어서 하나의 UNIQUE 제약 조건을 설정함
모든 컬럼의 값이 같아야 중복으로 취급합 !
-  복합키는 테이블 레벨로만 지정할 수 있다. 

 

🔎 3. PRIMARY KEY(기본키) 

① 제약조건

NOT NULL + UNIQUE (모든 컬럼이 같아야 중복! ) 제약조건을 의미

- 한 테이블당 한 개만 설정 할 수 있음 

 

② 복합키 
-  복합키는 테이블 레벨로만 지정할 수 있다. 

 

 

🔎 3. FOREIGN KEY(외부키/외래키)

- 참조(REFERENCES)된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있음

- 참조될 수 있는 컬럼은 PRIMARY KEY컬럼과, UNIQUE 지정된 컬럼만 외래키로 사용할 수 있음

- [삭제롤]   : ON DELETE SET NULL  → 부모키 삭제 시 자식키를 NULL로 변경하는 옵션 

 

* 참조할 테이블명  - 부모 ! 

1) 컬럼레벨일 경우

  • 컬럼명 자료형(크기) [CONSTRAINT 이름] REFERENCES 참조할 테이블명 [(참조할컬럼)] [삭제룰]

2) 테이블레벨일 경우

  •  [CONSTRAINT 이름] FOREIGN KEY (적용할컬럼명) REFERENCES 참조할테이블명 [(참조할컬럼)] [삭제룰]

 

🔎 4. CHECK 

- 컬럼에 기록되는 값에 조건 설정을 할 수 있음 

CREATE TABLE USER_USED_CHECK(
  USER_NO NUMBER PRIMARY KEY,
  USER_ID VARCHAR2(20) UNIQUE,
  USER_PWD VARCHAR2(30) NOT NULL,
  USER_NAME VARCHAR2(30),
  
  GENDER VARCHAR2(10) CONSTRAINT GENDER_CHECK CHECK(GENDER IN ('남','여'))  ,
  
  PHONE VARCHAR2(30),
  EMAIL VARCHAR2(50)
);


INSERT INTO USER_USED_CHECK
VALUES(2, 'user02', 'pass02', '홍길동', '남자', '010-1234-5678', 'hong123@kh.or.kr');

성별을 남 / 여만 기록 가능하도록 설정했는데, '남자'라는 조건 이외 값이 들어와 에러 발생

 

 

728x90