break

for, while, do while을 사용할 때 실행을 중지시켜주는 역할을 해준다.

 

아래와 같이 break를 만난다면 실행문이 중지된다.

 

만약 반복문이 중첩되어 있다면 어떻게 될까??

중첩이 되어있다면 가까운 반복문만 종료하고 바깥 반복문은 종료하지 않는다.

만약 중첩된 반복문과 바깥 반복문을 모두 종료하고 싶다면 바깥 반복문에 라벨을 붙이고,

"break 이름" 을 사용하면 된다. 

 

 

'DataBase > DDL' 카테고리의 다른 글

7/5 SQL 테이블 제거 및 변경  (0) 2021.07.06
7/5 SQL 테이블 생성 및 제한조건  (0) 2021.07.06
7/2 테이블 생성  (0) 2021.07.02
7/2 DDL  (0) 2021.07.02
데이터베이스 보안

다중 사용자 환경에서 개별 사용자들은 데이터베이스 접근 및 사용에 있어서 적절한 보안을 유지해야한다.

 

데이터베이스 보안 종류

ㅁ 시스템 보안

: 사용자 계정 생성, 암호변경, 디스크 공간 할당, 시스템 작업등과 같이 시스템 수준에서의

  데이터베이스 접근 및 사용을 관리하는 것을 의미한다. Authentication(인증) 관련

 

ㅁ데이터 보안

: 데이터베이스 객체에 대한 사용자들의 접근 및 사용을 관리하는 것이다.

 Authorization(권한) 관련

 

객체 권한 부여

EX)

 

GRANT 권한내용 ON 권한부여관련 테이블명 TO user/role/PUBLIC

 

ㄴ user나 role, public 에 권한내용을 부여하는 것이다.

 

객체 권한 회수

ex)

 

REVOKE 권한내용 ON 권한회수관련 테이블명 TO user/role/PUBLIC

 

ㄴ user 나 role, public 안에 있는 권한을 회수한다.

 

ROLE

: 권한들의 묶음을 의미한다. 일반 사용자에게 권한을 부여 및 회수하듯이 롤(ROLE)에 권한 부여 및 회수가 가능하다.

 

ㅁ 장점

- 편리한 권한 관리

- 동적 권한 관리 (롤을 부여 받은 모든 사용자들은 자동적으로 변경된 권한을 즉시 부여받게 된다.)

-권한의 선택적 가용성 (활성화 / 비활성화 가능)

 

빌트인 롤

 

'DataBase' 카테고리의 다른 글

7/6 SQL 시퀀스  (0) 2021.07.07
시퀀스(SEQUENCE)

시퀀스 객체는 호출될 떄마다 자동으로 숫자를 생성하는 객체이다.

테이블의 특정 컬럼값을 넘버링(NUMBERING)하기 위해서 사용된다.

 

EX)

CREATE SEQUENCE 시퀀스명

START WITH 시작점

INCREMENT BY 증감숫자

MAXVALUE 최대값

MINVALUE 최소값

CYCLE 호출된 값이 최대값에 도달하면 최소값으로 돌아가 다시  시작된다. 만일 사용을 원하지 않는다면 NOCYCLE

CACHE 시퀀스 값을 미리 만들어서 필요 시 바로 제공하는 방법. 만일 사용을 원하지 않는다면 NOCACHE

 

 

CREATE SEQUENCE DEPT_DEPTNO_SEQ

START WITH 10

INCREMENT BY 10

MAXVALUE 100

MINVALUE 5

CYCLE 

NOCACHE

 

주의! 쉼표(,) 를 쓰지 않고 나열해야함.

NEXTVAL 과 CURRVAL

시퀀스 객체가 생성되었다고 자동으로 시퀀스 값이 생성되는 것이 아니다.

시퀀스 값을 얻기 위해서는 반드시 시퀀스 객체를 호출해야 되며 방법은 다음과 같다.

 

시퀀스명.NEXTVAL 

 

위와 같이 입력하면 시퀀스 값을 불러올 수 있다.

 

CURRVAL은 현재 생성된 시퀀스 값을 조회하기 위해서 사용한다. 조심해야할 점은 무조건 NEXTVAL를 먼저 사용하고 나서 CURRVAL를 입력해야 조회가 가능하다.

 

'DataBase' 카테고리의 다른 글

7/6 SQL 사용자권리  (0) 2021.07.07
DROP

DROP은 테이블에 저장된 모든 데이터와 관련 INDEX 및 제약조건이 삭제된다.

단, FOREGIN KEY로 연결되어 있는 테이블의 데이터는 제외이다.

 

  DROP TABLE 테이블이름 CASCADE CONSTRAINTS;

 

EX) DROP TABLE DEPT CASCADE CONSTRAINTS;

 

RENAME 

테이블의 이름을 변경한다.

 

  RENAME 기존이름 TO 변경할 이름  

 

RENAME SAWON_7 TO SAWON_77;

 

ALTER 

ATLER의 기능은 다음과 같다.

1. 새로운 컬럼추가

2. 기존 컬럼 수정

3. 컬럼 삭제

4. 컬럼 이름 변경

5. 제약조건 추가, 삭제

6. 제약조건 활성화 및 비활성화

 

ㅁ ALTER TABLE .. ADD

: 컬럼추가

 

EX) CREATE TABLE EMP04 
(NUM NUMBER(4),
NAME VARCHAR2(10));

SELECT* FROM EMP04;

ALTER TABLE EMP04
ADD(ADDRESS VARCHAR(30));

 

ㅁ ALTER TABLE .. MODIFY

: 컬럼변경. 

- 숫자 및 문자 컬럼의 전체 길이를 증감소 시킬 수 있다.

- 모든 행의 해당 컬럼 값이 NULL인 경우에만 데이터 타입을 변경할 수 있다.

- 디폴트 값을 변경하면 변경 이후부터 입력되는 행에 대해서만 적용된다.

 

EX) ALTER TABLE EMP04
MODIFY (ADDRESS NUMBER(4));

 

ㅁ ALTER TABLE .. DROP

: 컬럼 제거.

EX)
ALTER TABLE EMP04
DROP (ADDRESS);

 

ㅁ ALTER TABLE .. RENAME COLUMN..

: 컬럼이름변경

EX)

ALTER TABLE TEST02

RENAME COLUMN ADDRESS TO ADDR;

 

ㅁ ALTER TABLE .. ADD CONSTRAINT... TYPE

: 제한조건추가

EX)

SELECT*  FROM TEST02;
ALTER TABLE TEST02
ADD CONSTRAINT TEST02_EMPNO_PK PRIMARY KEY(EMPNO);

 

** NOT NULL 제약조건 : ALTER TABLE .. MODIFY CONSTRAINT... TYPE

EX) 

ALTER TABLE TEST02 
MODIFY (ENAME VARCHAR2(20) NOT NULL);

 

ㅁ ALTER TABLE ...DROP CONSTRAINT

: 제한조건삭제

EX)

ALTER TABLE TEST02
DROP PRIMARY KEY CASCADE;

 

 

'DataBase > DDL' 카테고리의 다른 글

#Java break 문  (0) 2021.07.13
7/5 SQL 테이블 생성 및 제한조건  (0) 2021.07.06
7/2 테이블 생성  (0) 2021.07.02
7/2 DDL  (0) 2021.07.02

테이블을 생성할 때 CREATE를 이용해서 만든다. 문법은 다음과 같다.

 

 CREATE TABLE 테이블명 (컬럼이름 컬럼타입)

 

EX) CREATE TABLE DEPARTMENT

(DEPTNO NUMBER(2),

DNAME VARCHAR2(15),

LOC VARCHAR2(15));

 

위와 같이 입력하면 테이블 안에 컬럼들이 생성된다.

컬럼 안에 레코드를 넣기 위해서는 다음과 같이 입력한다.

 

EX) INSERT INTO DEPARTMENT (DEPTNO, DNAME, LOC) 

VALUES(10, '인사', '서울'); --NULL 값은 입력불가.

 

 

서브쿼리를 이용해서 테이블를 생성할 수 있다. 아래와 같은 방법을 앞글자만 따서 CTAS(씨탁스)라고도 부른다.

 

  CREATE TALBE 테이블명 [컬럼이름N] AS SUBQUERY

 

EX)

CREATE TABLE DEPTA (NO, NAME) 
AS
SELECT DEPTNO, DNAME FROM DEPT;

SELECT * FROM DEPTA

 


DEFAULT 

해당 테이블에 행을 입력할 때, 해당 컬럼에 값을 지정하지 않은 경우 자동으로 디폴트 값이 입력됨.

이는 NULL값이 입력되는 것을 방지하기 위한 것이다.

 

EX) CREATE TABLE DEF_TABLE
(NUM NUMBER(2), WRITEDAY DATE DEFAULT SYSDATE);

 

INSERT INTO DEF_TABLE VALUES (1, DEFAULT);

 

제한조건 (CONSTRAINTS)

부적절한 자료가 입력되는 것을 방지하기 위하여 CONSTRAINT을 사용한다.

제약 조건은 테이블 레벨 과 컬럼 레벨에서 규칙을 적용한다.

제약 조건은 종속성이 존재할 경우 테이블 삭제를 방지한다.

테이블에서 행이 삽입, 갱신 삭제 될 때마다 테이블에서 규칙을 적용한다.

일시적으로 DISABLE과 ENABLE 할 수 있다.

 

*컬럼 레벨 : 한 개의 컬럼에 한 개의 제약조건만 가능함

*테이블 레벨: 한 개 이상의 컬럼에 한 개의 제약 조건을 정의할 수 있다.

 참고로, NOT NULL은 테이블 레벨이 불가능하다.

 

ㅁPRIAMRY KEY

- 중복불가,

- NULL 값 입력불가.

 

ㅁUNIQUE

-중복불가

-NULL 값 허용

 

ㅁCHECK

-조건에 맞는 데이터 값만 입력가능하도록 만들어줌.

 

EX)

CREATE TABLE DEPARTMENT8

(DEPTNO NUMBER(2),

DNAME VARCHAR2(15),

LOC VARCHAR2(15),

CONSTRAINT DEPARTMENT8_DNAME_CK CHECK(DNAME IN ('개발','인사')));

 

ㅁFOREIGN

참조키라고 부르며 해당 테이블에서 다른 테이블을 참조할 때 올바른 데이터값만 참조 가능하도록 제약하는 방법이다.

 

EX)

 

A. 컬럼 레벨

CREATE TABLE EMP03
(EMPNO NUMBER(4) CONSTRAINT EMP03_EMPNO_PK PRIMARY KEY,
ENAME VARCHAR2(15),
DEPTNO NUMBER(2) CONSTRAINT EMP03_DEPTNO_FK 
REFERENCES DEPT02(DEPTNO));

 

B. 테이블 레벨

CREATE TABLE EMP03 
(EMPNO NUMBER(4) CONSTRAINT EMP03_EMPNO_PK PRIMARY KEY, 
ENAME VARCHAR2(15), 
DEPTNO NUMBER(2) CONSTRAINT EMP03_DEPTNO_FK  FOREIGN KEY(DEPTNO)
REFERENCES DEPT02(DEPTNO));

 

*테이블 레벨 사용 시 꼭 FOREIGN KEY 입력하기

 

 

'DataBase > DDL' 카테고리의 다른 글

#Java break 문  (0) 2021.07.13
7/5 SQL 테이블 제거 및 변경  (0) 2021.07.06
7/2 테이블 생성  (0) 2021.07.02
7/2 DDL  (0) 2021.07.02

테이블 생성에 관한 문법은 아래와 같다.

 

CREATE TABLE [스키마].테이블명

(컬러명 데이터타입 [DEFAULT 값 | 제약조건][.....])

 

여기서 스키마란

사용자가 데이터베이스에 접근하여 생성한 객체들의 대표 이름을 의미한다.

SCOTT => 스키마

 

오라클의 데이터 타입
데이터 타입 종류 설명
CHAR(SIZE) 주어진 크기만큼의 고정 길이의 문자 저장, 최소 1바이트, 최대 2000 바이트 저장 가능하다.
 VARCHAR2(SIZE) 주어진 크기만큼의 가변 길이의 문자 저장, 최소 1바이트, 최대 4000 바이트 저장 가능하다.
NUMBER(p, s) 가변 길이의 숫자 저장. 전체 자릿수는 p, 소수점 자릿수는 s 이다. 정밀도와 스케일로 표현되는 숫자저장. 
p는 1~38, s는 -84~127
DATE 날짜 및 시간
ROWID 테이블 내 행의 고유 주소를 가지는 64비트 문자

 

 

'DataBase > DDL' 카테고리의 다른 글

#Java break 문  (0) 2021.07.13
7/5 SQL 테이블 제거 및 변경  (0) 2021.07.06
7/5 SQL 테이블 생성 및 제한조건  (0) 2021.07.06
7/2 DDL  (0) 2021.07.02
DDL(Data Definition Language)

데이터베이스의 구조를 생성하거나 수정 및 삭제하는 데 사용되는 SQL문이다.

 

오라클에서 사용하는 객체
객체명 설명
테이블(TABLE) 기본적인 저장 단위로 행과 칼럼으로 구성
뷰(VIEW) 한 개 이상의 테이블의 논리적인 부분 집합을 표시
시퀀스(SEQUENCE) 숫자 값 생성기
인덱스(INDEX) 데이터 검색 기능 향상
동의어(SYNONYM) 객체에 대한 별칭

 

데이터베이스 객체 이름 지정방법

- 테이블 및 컬럼명은 문자로 시작하며 1 ~ 30 문자 이내로 작성한다. (30Btye)

- 테이블 및 컬렴명은 A~Z, a~z, 0~9, _ , $, #로 작성한다. 한글 작성도 가능하지만 권장하지는 않는다.

- 동일한 사용자의 다른 객체와 이름이 중복되지 않도록 한다.

- ORACLE의 예약어는 사용불가.

- 대소문자 구별안함.

'DataBase > DDL' 카테고리의 다른 글

#Java break 문  (0) 2021.07.13
7/5 SQL 테이블 제거 및 변경  (0) 2021.07.06
7/5 SQL 테이블 생성 및 제한조건  (0) 2021.07.06
7/2 테이블 생성  (0) 2021.07.02
Transaction

- 트랜잭션은 데이터베이스의 논리적인 단위이다.

-하나의 트랜잭션에는 하나 이상의 SQL문장이 포함되며, 분할 할 수 없는 최소의 단위이다.

 그렇기 때문에 전부 적용하거나 전부 취소된다.

 즉, 트랜잭션은 'ALL or NOTHING' 이다.

 

 

Transaction 시작과 종료

-DML 명령을 시작한 경우에 TRANSACTION 이 자동으로 시작된다.

 

-사용자가 COMMIT 또는 ROLLBACK 명령을 명시적으로 실행한 경우 종료된다.

 또는 DDL 문장을 실행하는 경우, DCL문장을 실행하는 경우

 사용자가  SQL*PLUS 또는 IQL*PLUS 를 종료한 경우

 하드웨어 고장 또는 시스템 오류 시

 

 

COMMIT

모든 데이터 변경사항을 데이터베이스에 반영시키는 명령어이다.

변경 전의 데이터는 모두 삭제된다.

모든 사용자들이 트랜잭션 종료 후의 결과를 확인할 수 있다.

즉, 현 사용자가 트랜잭션을 종료시키지 않으면 다른 사용자들은 해당 내용을 확인할 수 없다.

 

 

ROLLBACK

모든 데이터 변경사항을 취소하는 명령어이다.

변경 전의 데이터가 복원된다.

모든 사용자들이 트랜잭션 종료 후의 결과를 확인할 수 있다.

트랜잭션이 진행 중이었던 행들에 대한 잠금이 모두 해소되며, 다른 사용자에 의해서 확인 및 변경이 가능해진다.

 

** COMMIT과 ROLLBACK을 입력하지 않는 이상 현재 작성하고 데이터는 트랜잭션이 계속해서 진행중임을 의미한다.

 

INSERT INTO DEPT  VALUES(50, 'AA', 'AA'); --트랜잭션 시작

ROLLBACK ; --트랜잭션종료

INSERT INTO DEPT  VALUES(50, 'AA', 'AA'); --트랜잭션 시작

INSERT INTO DEPT  VALUES(60, 'AA', 'AA');

INSERT INTO DEPT  VALUES(70, 'AA', 'AA');

ROLLBACK; --트랜잭션종료

INSERT INTO DEPT  VALUES(50, 'AA', 'AA'); --트랜잭션 시작

UPDATE DEPT SET LOC = 'AAAAA';

ROLLBACK; --트랜잭션 종료

INSERT INTO DEPT  VALUES(50, 'AA', 'AA'); --트랜잭션 시작

INSERT INTO DEPT  VALUES(60, 'AA', 'AA');

--COMMIT --트랙잭션종료

 

'DataBase > DML' 카테고리의 다른 글

7/2 UPDATE, DELETE  (0) 2021.07.02
7/2 SQL INSERT  (0) 2021.07.02
7/1 SQL DML  (0) 2021.07.01
UPDATE

테이블에 저장된 데이터를 수정하기 위해서 사용되며 한 번에 여러 개의 행(ROW or RECORD)를 수정할 수 있다.

 

EX) UPDATE MYDEPT

SET DNAME = '영업', LOC = '경기'

WHERE DEPTNO = 50;

 

서브쿼리를 이용하여 바꿀 수도 있다.

 

UPDATE EMP
SET JOB =(SELECT JOB
            FROM EMP
            WHERE EMPNO = 7900),
     SAL = (SELECT SAL FROM EMP
            WHERE EMPNO = 7844)
            
        WHERE EMPNO = 9001;

 

      SubQuery

 

DELETE

테이블에 저장된 행들을 삭제한다.

한 번에 여러 개의 행들을 삭제할 수 있다.

 

DELETE FROM TABLE

WHERE CONDITION ;

* FROM 과 WHERE 조건문은 생략이 가능하니 참고해주세요!

 

delete 또한 서브쿼리를 이용해서 문장을 작성할 수 있다.

EX)

DELETE FROM EMP

WHERE DEPTNO = (SELECTE DEPTNO FROM DEPT WHERE DNAME = '경리과');

 

      SubQuery

 

 

'DataBase > DML' 카테고리의 다른 글

7/2 트랜잭션(Transaction)  (0) 2021.07.02
7/2 SQL INSERT  (0) 2021.07.02
7/1 SQL DML  (0) 2021.07.01

이전 시간에 이어서 계속 INSERT를 이야기해보자면..

 

 

INSERT 는 복수 테이블로 원하는 데이터를 전송할 수 있다.

 

EX) 

INSERT ALL
    INTO MYEMP_HIRE VALUES(EMPNO, ENAME, HIREDATE,SAL)
    INTO MYEMP_MGR VALUES (EMPNO, ENAME, MGR)
    SELECT EMPNO, ENAME, HIREDATE, SAL, MGR FROM EMP;
    COMMIT;

 

데이터 정보를 모두 다 입력한 다음 본인이 원하는 값이 제대로 들어갔는 지 무조건 확인하기!

확인 후에 COMMIT 꾸욱~

 

EX) 

INSERT ALL
WHEN SAL > 3000 THEN
INTO MYEMP_HIRE2 VALUES (EMPNO, ENAME, HIREDATE, SAL)
WHEN MGR = 7698 THEN
INTO MYEMP_MGR2 VALUES(EMPNO, ENAME, MGR)
SELECT empno, ename, hiredate, sal, mgr
from emp; *SELECT 부분은 SUBQUERY*

 

EX)

INSERT FIRST

WHEN SAL = 800 THEN

INTO TABLE1 VALUES (EMPNO, ENAME, HIREDATE, SAL)

WHEN SAL < 2500 THEN

INTO TABLE2 VALUES (EMPNO, ENAME, MGR)

SELECT EMPNO, ENAME, HIREDATE, SAL. MGR

FROM EMP;

'DataBase > DML' 카테고리의 다른 글

7/2 트랜잭션(Transaction)  (0) 2021.07.02
7/2 UPDATE, DELETE  (0) 2021.07.02
7/1 SQL DML  (0) 2021.07.01

+ Recent posts