Database 2일차

2026. 1. 22. 16:20대우개발원 수업 내용/Database (sql)

반응형

[테이블 스페이스]

• 오라클은 데이터를 관리하는 데이터베이스. 데이터를 어딘가에 저장해놓고 사용하는 시스템이라고 볼 수 있다. 
• 데이터 저장 단위는 물리적, 논리적단위로 나눌 수 있다. 물리적 단위는 파일을 의미
• 논리적 단위는  데이터블록 -> 익스텐트 -> 세그먼트 -> 테이블스페이스이렇게 나뉜다.

 

[테이블 스페이스 생성]

create tablespace [테이블 스페이스명] datafile '파일경로' -- 파일경로 size 10M --초기 데이터 파일 크기 설정

autoextend off – 꽉 찼을 경우 자동 파일 크기 증가 옵션 설정
drop tablespace [테이블 스페이스명] including contents and datafiles;

 

 

테이블 스페이스 만드는 과정

더보기

CREATE TABLESPACE myts DATAFILE 'E:\oracle\oradata\MYORACLE\myts.dbf' size 100M AUTOEXTEND ON NEXT 5M;
이게 데이터 베이스 이름 (여기에 테이블 스페이스를 만든다)  

주소창에 경로를 복사한다 ↓

 

CREATE TABLESPACE myts DATAFILE

 

 

myts.dbf라는 이름의 테이블 스페이스를 만들고

size 100M  - 100mb크기의 사이즈로 만듬

AUTOEXTEND ON NEXT 5M; - 현재 할당된 공간이 다 차면 저장공간이 자동으로 5MB씩 증가

테이블 스페이스가 생긴것을 확인

 

사용자 생성

더보기

유저의 이름은 ora_user을 그냥 쓰면 공통 사용자 또는 롤 이름이 부적합하다고 뜸

oracle 12버전 이상은 앞에 c##을 넣어줘야하지만 

아래를 사용해서 사용자 세션을 만들어서 안써도 되도록 만듬

ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE; 

CREATE USER ora_user IDENTIFIED BY 1234

DEFAULT TABLESPACE MYTS

TEMPORARY TABLESPACE TEMP;

이렇게 성공적으로 사용자 생성

 

GRANT DBA TO ora_user;

권한 부여

connect ora_user/1234

연결

select user from dual;

듀얼 테이블에서 유저에 대한 정보 조회

 

SQL developer 실행

더보기

오리클 접속 테스트

관리자 계정의 접속 여부를 테스트


↓ name을 system으로 할것

테스트를 성공하면 저장 후 접속



system 테이블 밑으로 많이 생긴것을 확인


접속 추가

아이콘에 콘센트 연결 모양은 접속이 되었다는 것


select user from dual;

해당 줄에 crtl + enter눌러서 실행


f5

전체 쿼리문 다 실행




지금까지 실행된 쿼리문 보기



E드라이브에 backup 폴더 생성

 

다운 받고 옮김


expall.dmp 파일 임포트(ora_user/1234) 

imp ora_user/1234 file=expall.dmp log=empall.log ignore=y grants=y rows=y indexes=y full=y 

실행


expcust.dmp 파일 임포트(ora_user/1234) 

imp ora_user/1234 file=expcust.dmp log=empall.log ignore=y grants=y rows=y indexes=y full=y


새로고침


SELECT table_name FROM user_tables;

[SQL과 PL/SQL 소개]

  • 구조화된 질의 언어(Structured Query Language)의 약자
  • DB 상에서 데이터를 읽고, 쓰고 삭제하는 등 데이터 관리를 위한 프로그램 언어
  • 다른 프로그램 언어와 달리 집합적 언어의 특징을 가짐
  • DDL과 DML로 구분됨
  • 개발자 입장에서 사용하는 언어는 대부분 DML임

[DDL ( Data Definition Language)]

  • 데이터베이스 객체를 생성, 삭제, 변경하는 언어
  • CREATE : 테이블이나 인덱스, 뷰 등 데이터베이스 객체를 생성
  • DROP : 생성된 데이터베이스 객체를 영구히 삭제
  • ALTER : 기 생성된 데이터베이스 객체를 수정
  • TRUNCATE : 테이블이나 클러스터의 데이터를 통째로 삭제

[DML ( Data Manipulation Language)]

  • 데이터베이스 객체를 조작하는 언어
  • SELECT : 테이블이나 뷰에 있는 데이터를 조회
  • INSERT : 데이터를 신규로 생성
  • UPDATE : 기 생성된 데이터를 수정
  • DELETE : 데이터 삭제
  • COMMIT : 변경된 데이터를 최종 적용
  • ROLLBACK : 변경된 데이터를 적용하지 않고 이전 상태로 되돌림

[데이터베이스 객체]

  • TABLE  : 데이터 담고 있는 객체.
  • VIEW  : 하나 이상의 테이블 연결해서 마치 테이블인 것처럼 사용하는 객체.
  • INDEX : 테이블에 있는 데이터를 바르게 찾기 위한 객체.
  • SYNONYM(동의어) :  데이터베이스 객체에 대한 별칭을 부여한 객체.
  • SEQUENCE : 일련번호 채번을 할 때 사용되는 객체.
  • FUNCTION : 특정 연산을 하고 값을 반환하는 객체.
  • PROCEDURE : 함수와 비슷하지만 값을 반환하지 않는 객체.
  • PACKAGE : 용도에 맞게 함수나 프로시저 하나로 묶어 놓은 객체.

[테이블]

  • 데이터를 담고 있는 객체
  • 로우(행)과 컬럼(열)으로 구성된 2차원 형태의 객체
  • SQL 실행 대상인 객체
  • -- 를 쓰면 주석

생성구문 (대괄호 부분은 생략이 가능하다)

CREATE TABLE [스키마.]테이블명 (
    컬럼1 컬럼1_데이터타입 [NULL, NOT NULL],
    컬럼2 컬럼2_데이터타입 [NULL, NOT NULL], 
…
…
) [ TABLESPACE 테이블스페이스명];

 

테이블 만들어보기 실습

더보기

SELECT table_name FROM user_tables;
-- 테이블

CREATE TABLE ex2_1(
    COLUMN1 CHAR(10),
    COLUMN2 VARCHAR(10),
    COLUMN3 NVARCHAR2(10),
    COLUMN4 NUMBER
    );

데이터를 직접 주입

커밋된 상태에서는 롤백이 되지 않음

 

1. 테이블(Table)

  • 데이터베이스에서 데이터를 저장하는 기본 구조
  • 엑셀의 시트와 동일한 개념

2. 행(Row)

  • 테이블에서 하나의 레코드(Record)
  • 한 개체(사람 1명, 상품 1개 등)에 대한 한 줄의 데이터

동의어

  • Row
  • Record
  • Tuple (이론/관계형 모델)

ID | NAME | AGE
1  | 홍길동 | 20   ← 행(Row)

3. 열(Column)

  • 데이터의 속성(항목) 을 나타냄
  • 각 행이 공통으로 가지는 데이터의 종류

동의어

  • Column
  • Attribute
  • Field (실무에서 자주 사용)

ID | NAME | AGE

→ ID, NAME, AGE 각각이 열(Column)


4. 필드(Field)

 

  • 열(Column)과 동일한 의미로 사용
  • “이 테이블에 어떤 필드가 있나?” = 어떤 컬럼이 있나
  • 행과 열이 만나는 하나의 값(셀)

NAME 필드의 값 = '홍길동'

5. 한 번에 비교 정리 (시험 대비용)

용어의미다른 표현

테이블 데이터 저장 구조 Table
한 개의 데이터 묶음 Row / Record / Tuple
데이터 항목(속성) Column / Attribute / Field
필드 열 또는 하나의 값 Column 또는 Cell

6. 엑셀로 비유하면

DB 용어엑셀

테이블 시트
행(Row) 가로 줄
열(Column) 세로 줄
필드(Field) 셀 또는 열



[테이블 생성 규칙]
ㆍ 테이블명, 컬럼명의 최대 크기는 30 Byte
ㆍ 테이블명, 컬럼명으로 예약어 사용 불가
ㆍ 테이블명, 컬럼명으로 문자, 숫자, '_','$','#'문자 사용가능, 첫 글자는 문자만.
ㆍ 한 테이블에 만들 수 있는 컬럼은 최대 255개

 

[데이터 타입]
문자 데이터 타입

  • CHAR (크기[ BYTE | CHAR ] ) : 고정길이 문자, 최대 2000byte, 디폴트 값은 1, byte
  • VARCHAR2 (크기[ BYTE | CHAR ] ) :  가변길이 문자, 최대 4000byte, 디폴트 값은 1, byte
  • NCHAR (크기) : 고정길이 유니코드 문자(다국어 입력가능), 최대 2000byte, 디폴트 값은 1
  • NVARCHAR2 (크기 ) : 가변길이 유니코드 문자(다국어 입력가능), 최대 4000byte, 디폴트 값은 1
  • LONG  : 최대 2기가바이트 크기의 가변길이 문자형, 잘 사용하지 않음
  • ---------------------------------------------------------------------------------------------------
  • CHAR 형보다는 VARCHAR2 형을 사용하는 것이 좋다
  • 문자형 데이터타입의 길이는 영문자 1 BYTE, 한글 3 BYTE
  • 영문자, 한글 외의 다국어문자가 입력될 경우에는 NVARCHAR2 사용

실습

컬럼1에는 abc 컬럼2에는 def넣으라는 구문

더보기

    INSERT INTO ex2_1 (column1, column2) VALUES ('abc','def');


SELECT column1, LENGTH(column1) as len1,
    column2, LENGTH (column2) as len2
    FROM ex2_1;

 

 

더보기

    CREATE TABLE ex2_2(
    COLUMN1 VARCHAR2(3),
    COLUMN2 VARCHAR2(3 byte),
    COLUMN3 VARCHAR2(3 char)
    );
    INSERT INTO ex2_2 VALUES('abc','abc','abc');
    
    SELECT column1, LENGTH(column1) as len1,
                    column2, LENGTH(column2) as len2,
                    column3, LENGTH(column3) as len3
    FROM ex2_2;


'홍길동','홍길동','홍길동'을 넣었을때 한글은 한글자당 3byte이기 때문에 안된다

따라서

 INSERT INTO ex2_2 (column3) VALUES('홍길동');
 
 SELECT column3, LENGTH(column3) AS len3, LENGTHB(column3) AS byte_len
 From ex2_2;

이 구문으로 실행하면 가능


  • [데이터 타입]
    숫자 데이터 타입
  • 데이터 타입 설명
  • NUMBER [(p, [,s])] : 가변숫자, p(1~38, 디폴트 값은 38)와 s(-84~127, 디폴트 값은 0)는 10진수 기준, 최대 22byte
  • FLOAT[(p)] : NUMBER의 하위타입, p는 1~128, 디폴트 값은 128, 2진수 기준, 최대 22byte
  • BINARY_FLOAT : 32비트 부동소수점 수, 최대 4byte
  • BINARY_DOUBLE : 64비트 부동소수점 수, 최대 8byte
  • -----------------------------------------------------------------------
  • P는 소수점 기준 유효숫자 자릿수, S는 소수점 기준 자릿수
  • S가 양수이면 소수점 이하, 음수이면 소수점 이상 유효숫자 자릿수 의미
  • 대부분의 숫자는 NUMBER 형을 사용할 것, 디폴트 자릿수는 38 (크기는 28 byte)

실습

 

 

ex_user 생성 및 추가

문제


[FLOAT 데이터 타입]

더보기

--2_4
CREATE TABLE ex2_4 (
    COL_FLOT1 FLOAT(32),
    COL_FLOT2 FLOAT
    );
INSERT INTO ex2_4 (col_flot1, col_flot2) VALUES (1234567891234, 1234567891234);

SELECT * FROM ex2_4;

 

정확도가 떨어지고 오류가 날 수도 있기 때문에 DB에서는 NUMBER를 쓰고 FLOAT데이터는 잘 쓰지 않는다.

 


[날짜 데이터 타입]

더보기

-- 날짜 데이터 타입
CREATE TABLE ex2_5 (
    COL_DATE    DATE,
    COL_TIMESTAMP TIMESTAMP
    );
    
    INSERT INTO ex2_5 VALUES (SYSDATE, SYSTIMESTAMP);

 

조회

    SELECT * FROM ex2_5;

 


문제

 

더보기
--2.
-- DROP TABLE EMP; --이미 테이블이 만들어진게 없는지 확인
CREATE TABLE EMP ( 
    ENO NUMBER(4), 
    ENAME VARCHAR2(10), 
    JOB VARCHAR2(9), 
    MANAGER NUMBER(4), 
    HIREDATE DATE, 
    SALARY NUMBER(7, 2), 
    COMMISSION NUMBER(7, 2), 
    DNO NUMBER(2) );

 


[NULL]
NULL은 데이터가 없음을 의미, 컬럼 속성에 명시, 디폴트는 NULL 허용

제약조건

  • 컬럼에 대한 속성 형태로 정의하지만 오라클 객체 중 하나로 데이터 무결성 보장
  • NOT NULL : NOT NULL로 명시된 컬럼은 반드시 값을 입력
  • UNIQUE : 한 테이블 내에서 반드시 유일한 값이 입력되어야 한다
  • 기본키(Primary Key) : NOT NULL + UNIQUE, 보통 키라 하면 기본키를 의미
  • 테이블당 1개의 기본키만 가질 수 있으며, 여러 개의 컬럼으로 기본키 구성이 가능
<구문>
컬럼명 데이터타입 PRIMARY KEY 혹은
CONSTRAINTS 제약조건명 PRIMARY KEY (컬럼명, …)

 

NOT NULL  실습

더보기
    -- NOT NULL
    CREATE TABLE ex2_6 (
        COL_NULL VARCHAR2(10),    --아무 표기가 없기 때문에 NULL이 가능
        COL_NOT_NULL VARCHAR2(10) NOT NULL
        );

위의 코드에 INSERT문 추가

        INSERT INTO ex2_6 VALUES ('AA', ''); -- 오류
        INSERT INTO ex2_6 VALUES ('AA', 'BB'); --가능
        INSERT INTO ex2_6 VALUES ('', 'BB'); -- 가능

        SELECT * FROM ex2_6;


        SELECT constraint_name, constraint_type, table_name, search_condition
            FROM user_constraints
            WHERE table_name = 'EX2_6';

UNIQUE 실습

더보기
    -- UNIQUE
CREATE TABLE ex2_7 (
    COL_UNIQUE_NULL VARCHAR2(10) UNIQUE,
    COL_UNIQUE_NNULL VARCHAR2(10) UNIQUE NOT NULL,
    COL_UNIQUE VARCHAR2(10),
    CONSTRAINT unique_nm1 UNIQUE(COL_UNIQUE)
    );

            SELECT constraint_name, constraint_type, table_name, search_condition
            FROM user_constraints
            WHERE table_name = 'EX2_7';

INSERT INTO ex2_7 VALUES('AA','AA','AA');
INSERT INTO ex2_7 VALUES('AA','AA','AA'); -- 한번 더 실행하면 UNIQUE이기 때문에 안된다.
INSERT INTO ex2_7 VALUES('','BB','BB');
INSERT INTO ex2_7 VALUES('CC','','CC'); -- 두번째 컬럼에 NOT NULL인데 NULL값을 넣으려고 하면 오류
INSERT INTO ex2_7 VALUES('CC','CC','CC'); -- 데이터를 넣어주면 실행이 된다

 

'대우개발원 수업 내용 > Database (sql)' 카테고리의 다른 글

Database 6일차  (0) 2026.01.28
Database 5일차  (26) 2026.01.27
Database 4일차  (0) 2026.01.26
Database 3일차  (0) 2026.01.23
Database 1일차  (0) 2026.01.22