Database 3일차

2026. 1. 23. 15:37대우개발원 수업 내용/Database (sql)

반응형

 

[PRIMARY KEY]
- 중복 불가 (Unique)
- NULL 값 불가 (Not Null)

 

예제 코드 

 

더보기

 

-- 기본키
CREATE TABLE ex2_8 (
    COL1 VARCHAR2(10) PRIMARY KEY,
    COL2 VARCHAR2(10) 
    );
    
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name ='EX2_8';
    
INSERT INTO ex2_8 VALUES('','AA');
INSERT INTO ex2_8 VALUES('AA','AA');
INSERT INTO ex2_8 VALUES('BB','AA');
INSERT INTO ex2_8 VALUES('CC','');

 

- 테이블 ex2_8은 COL1을 기본키로 설정했기 때문에 중복/NULL 불가.
- COL2는 제약조건이 없어서 자유롭게 값 입력 가능.
- INSERT 실행 결과:
     첫 번째는 오류 (PRIMARY KEY에 NULL 값 불가).
     두 번째, 세 번째, 네 번째는 정상 삽입.


 

 

 


CHECK 속성

더보기

- 테이블 ex2_9에는 두 개의 CHECK 제약조건이 걸려 있음:

   CHECK(num1 BETWEEN 1 AND 9) 제약조건이 걸려서 값은 1~9 사이만 허용(num1은 1~9 범위만 허용.)
   gender는 'MALE' 또는 'FEMALE'만 허용.
- 삽입 결과:
   (10,'MAN') → 오류 (num1 범위 위반)
   (7,'MAN') → 오류 (gender 값 위반)
   (7,'MALE') → 성공
   (5,'FEMALE') → 성공

-- CHECK
CREATE TABLE ex2_9 (
    num1    NUMBER
        CONSTRAINTS check1 CHECK(num1 BETWEEN 1 AND 9),
    gender VARCHAR2(10)
        CONSTRAINTS check2 CHECK(gender IN('MALE','FEMALE'))
        );
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name ='EX2_9';
INSERT INTO ex2_9 VALUES (10,'MAN');
INSERT INTO ex2_9 VALUES (7,'MAN');
INSERT INTO ex2_9 VALUES (7,'MALE');
INSERT INTO ex2_9 VALUES (5,'FEMALE');

 


Quiz 1. 다음과 같은 구조의 테이블을 생성해 보자.

- 테이블 : ORDERS

- 컬럼 : ORDER_ID NUMBER(12,0)

ORDER_DATE DATE

ORDER_MODE VARCHAR2(8 BYTE)

CUSTOMER_ID NUMBER(6,0)

ORDER_STATUS NUMBER(2,0)

ORDER_TOTAL NUMBER(8,2)

SALES_REP_ID NUMBER(6,0)

PROMOTION_ID NUMBER(6,0)

- 제약사항 : 기본키는 ORDER_ID ORDER_MODE에는 'direct', 'online'만 입력가능 ORDER_TOTAL의 디폴트 값은 0

더보기

- ORDERS 테이블은 주문 정보를 저장하기 위한 구조로,
   ORDER_ID 기본키
   ORDER_MODE는 'direct' 또는 'online'만 허용
   ORDER_TOTAL은 기본값 0 + NOT NULL
- user_constraints 조회로 제약조건을 확인할 수 있고,
- SELECT * FROM ORDERS는 현재 데이터 상태를 보여줍니다 (지금은 비어 있음).

-- 문제
CREATE TABLE ORDERS (
    ORDER_ID NUMBER(12,0) PRIMARY KEY,
    ORDER_DATE DATE,
    ORDER_MODE VARCHAR2(8 BYTE)
        CONSTRAINTS check_order_mode CHECK(ORDER_MODE IN('direct', 'online')),
    CUSTOMER_ID NUMBER(6,0),
    ORDER_STATUS NUMBER(2,0),
    ORDER_TOTAL NUMBER(8,2)DEFAULT 0 NOT NULL,
    SALES_REP_ID NUMBER(6,0),
    PROMOTION_ID NUMBER(6,0)
--    CONSTRAINT PK_ORDER PRIMARY KEY (ORDER_ID)를 사용해도 된다.
    );
    
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name = 'ORDERS';
    
SELECT * FROM ORDERS;

 


FK ( 자식 테이블 생성)

더보기

- ex2_8_f는 ex2_8을 참조하는 자식 테이블입니다.
- 외래키 제약조건 때문에, 자식 테이블에 입력되는 값은 반드시 부모 테이블에 존재해야 합니다.

결과:

   P → 기본키 제약조건 (id)

   R → 외래키 제약조건 (col1 → ex2_8.col1)


- 따라서 A01은 성공, B01은 실패합니다.

-- 기본키
CREATE TABLE ex2_8 (
    COL1 VARCHAR2(10) PRIMARY KEY,
    COL2 VARCHAR2(10) 
    );
    
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name ='EX2_8';
    
INSERT INTO ex2_8 VALUES('','AA');
INSERT INTO ex2_8 VALUES('AA','AA');
INSERT INTO ex2_8 VALUES('BB','AA');
INSERT INTO ex2_8 VALUES('CC','');

-- FK
CREATE TABLE ex2_8_f (
    id  NUMBER PRIMARY KEY,
    col1 VARCHAR2(10),
    col3 VARCHAR2(20),
    CONSTRAINT fk_ex_8_col1
        FOREIGN KEY (col1)
        REFERENCES ex2_8(col1)
        );
        
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name ='EX2_8_F';

데이터를 주입하고 확인


-- 기본키
CREATE TABLE ex2_8 (
    COL1 VARCHAR2(10) PRIMARY KEY,
    COL2 VARCHAR2(10) 
    );
    
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name ='EX2_8';
    
INSERT INTO ex2_8 VALUES('','AA');
INSERT INTO ex2_8 VALUES('AA','AA');
INSERT INTO ex2_8 VALUES('BB','AA');
INSERT INTO ex2_8 VALUES('CC','');

-- FK
CREATE TABLE ex2_8_f (
    id  NUMBER PRIMARY KEY,
    col1 VARCHAR2(10),
    col3 VARCHAR2(20),
    CONSTRAINT fk_ex_8_col1
        FOREIGN KEY (col1)
        REFERENCES ex2_8(col1)
        -- ON DELETE CASCADE // 부모 삭제 시 자식도 같이 삭제
        );
        
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name ='EX2_8_F';

INSERT INTO ex2_8 VALUES('A01','DATA1');
INSERT INTO ex2_8 VALUES('A02','DATA2');

-- A01이 부모 테이블에 있으므로 정상 입력
INSERT INTO ex2_8_f VALUES(1,'A01','CHILD DATA');
-- B01이 부모 테이블에 없으므로 오류
INSERT INTO ex2_8_f VALUES(1,'B01','CHILD DATA');

 

 


[테이블 삭제]

<구문> DROP TABLE [스키마.]테이블명 [CASCADE CONSTRAINTS];

 

더보기

-- DROP 테이블 삭제
DROP TABLE ex2_10;


[테이블 변경]


- ALTER TABLE 명령어로 변경
   ALTER TABLE [스키마.]테이블명 RENAME COLUMN 변경전_컬럼명 TO 변경후_컬럼명;


- 컬럼 데이터타입 변경 :
   ALTER TABLE [스키마.]테이블명 MODIFY 컬럼명 데이터 타입;
- 컬럼 추가:
   ALTER TABLE [스키마.]테이블명 ADD 컬럼명 데이터 타입;

더보기

- RENAME COLUMN → 컬럼 이름 변경
- MODIFY → 컬럼 타입 변경
- ADD → 새 컬럼 추가
- DROP COLUMN → 컬럼 삭제
- ADD CONSTRAINT → 제약조건 추가 (예: 기본키)
- DROP CONSTRAINT → 제약조건 삭제

-- DEFAULT

CREATE TABLE ex2_10 (
    Col1    VARCHAR2(10) NOT NULL,
    Col2    VARCHAR2(10) NULL,
    Create_date DATE DEFAULT SYSDATE);

SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name ='EX2_10';
    
INSERT INTO ex2_10(col1, col2) VALUES('AA','AA');

SELECT * FROM ex2_10;

-- DROP 테이블 삭제
DROP TABLE ex2_10;

-- ALTER
ALTER TABLE ex2_10 RENAME COLUMN Col1 TO Col11;

DESC ex2_10;

ALTER TABLE ex2_10 MODIFY Col2 VARCHAR2(30);
ALTER TABLE ex2_10 ADD Col3 NUMBER;
ALTER TABLE ex2_10 DROP COLUMN Col3;
ALTER TABLE ex2_10 ADD CONSTRAINTS pk_ex2_10 PRIMARY KEY (col11);
ALTER TABLE ex2_10 DROP CONSTRAINTS pk_ex2_10;

 

[테이블 변경]

--컬럼 임시 삭제(DROP을 하면 부하가 커서 나중에 한가할때 하려고)

-- 복구 불가능 ALTER TABLE EMP SET UNUSED(ENAME,SALARY);

--임시 삭제한 컬럼 확인 SELECT * FROM ALL_UNUSED_COL_TABS;

--임시 삭제 -> 완전 삭제 ALTER TABLE EMP DROP UNUSED COLUMN;

--테이블 제거 DROP TABLE EMP;

더보기

- DESC EMP; -> 테이블 구조를 확인합니다.
- SET UNUSED → 컬럼을 즉시 삭제하지 않고 숨김 처리 (빠른 작업 가능).
- ALL_UNUSED_COL_TABS → UNUSED 컬럼 확인.
- DROP UNUSED COLUMN → 숨겨진 컬럼을 실제로 삭제.

-- 이전의 코드를 변경
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) );
    
-- UNUSED
ALTER TABLE EMP
SET UNUSED (ENAME, SALARY);

SELECT * FROM ALL_UNUSED_COL_TABS;

ALTER TABLE EMP DROP UNUSED COLUMN;

DESC EMP;

[ 테이블 복사 ]

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

SELECT 컬럼1, 컬럼2, ….

FROM 복사할 테이블명;

[where FALSE] ->데이터를 제외한 구조(컬럼)만 복사

예) CREATE TABLEex2_9_1 AS

SELECT * FROM ex2_9;

[WHERE 1=0]

 

더보기
CREATE TABLE ex2__9_1 AS
SELECT * FROM ex2_9;

Ex) Ex2_10테이블에서 col11을 복사해서 Ex2_10_1 테이블을 만드시오.

 

더보기
CREATE TABLE ex2__10_1 AS
SELECT Col11
FROM ex2_10
WHERE 1=0;

Quiz 2. 다음과 같은 구조의 테이블을 생성해 보자.

- 테이블 : ORDER_ITEMS

- 컬럼 : ORDER_ID NUMBER(12,0)

LINE_ITEM_ID NUMBER(3,0)

PRODUCT_ID NUMBER(3,0)

UNIT_PRICE NUMBER(8,2)

QUANTITY NUMBER(8,0)

- 제약사항 : 기본키는 ORDER_ID와 LINE_ITEM_ID. UNIT_PRICE, QUANTITY 의 디폴트 값은 0

 

더보기
-- DB02 Quiz 2 문제
CREATE TABLE ORDER_ITEMS (
    ORDER_ID NUMBER(12,0),
    LINE_ITEM_ID NUMBER(3,0),
    PRODUCT_ID NUMBER(3,0),
    UNIT_PRICE NUMBER(8,2)DEFAULT 0 NOT NULL,
    QUANTITY NUMBER(8,0)DEFAULT 0 NOT NULL,
    CONSTRAINTS PK_ORDER_ID PRIMARY KEY(ORDER_ID, LINE_ITEM_ID)
--    CONSTRAINTS PK_LINE_ITEM_ID PRIMARY KEY(LINE_ITEM_ID)
    );
    
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name = 'ORDER_ITEMS';
    
SELECT * FROM ORDER_ITEMS;

3. 긴 직업명(JOB)을 저장할 수 있도록 EMP테이블 을 수정하세요.

컬럼명 데이터 타입 크기
JOB varchar2 25

 

4. EMP테이블을 복사해서 EMPLOYEE2란 이름의 테이블을 생성하되 사원번호, 이름, 급여, 부서번호 칼럼만 복사하고

새로 생성된 칼럼명을 각각 EMP_ID, NAME, SAL, DEPT_ID로 지정하세요.

 

5. EMP 테이블을 삭제하세요

 

6. EMPLOYEE2테이블의 이름을 EMP로 변경하세요

 

7. DEPT 테이블에서 DNAME 칼럼을 제거하세요

 

8. DEPT 테이블에서 LOC칼럼을 UNUSED로 표시하세요.

 

9. UNUSED 칼럼을 모두 제거하세요.

더보기

--다음 표에 명시된 대로 EMP 테이블을 생성하세요. (ex_user)
CREATE TABLE dept (
    dno NUMBER(2),
    dname VARCHAR2(14),
    loc VARCHAR2(13)
    );

--chap02_ex2

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) );

-- DB02
-- 3. 긴 직업명(JOB)을 저장할 수 있도록 EMP테이블을 수정하세요.
ALTER TABLE EMP MODIFY JOB VARCHAR2(25);

--4. EMP테이블을 복사해서 EMPLOYEE2란 이름의
--테이블을 생성하되 사원번호, 이름, 급여, 부서번호
--칼럼만 복사하고 새로 생성된 칼럼명을 각각
--EMP_ID, NAME, SAL, DEPT_ID로 지정하세요

CREATE TABLE EMPLOYEE2 AS
SELECT 
    ENO    AS EMP_ID,
    ENAME  AS NAME,
    SALARY AS SAL,
    DNO    AS DEPT_ID
FROM EMP
WHERE 1=0;
--- 조건이 항상 거짓이므로 데이터는 복사하지 않고 컬럼만 복사

--5. EMP 테이블을 삭제하세요
DROP TABLE EMP;

--6. EMPLOYEE2테이블의 이름을 EMP로 변경하세요
ALTER TABLE EMPLOYEE2 RENAME TO EMP;

--7. DEPT 테이블에서 DNAME 칼럼을 제거하세요
ALTER TABLE DEPT DROP COLUMN DNAME;

--8. DEPT 테이블에서 LOC칼럼을 UNUSED로 표시하세요.
ALTER TABLE DEPT
SET UNUSED(LOC);

-- 9. UNUSED 칼럼을 모두 제거하세요.
ALTER TABLE DEPT 
DROP UNUSED COLUMNS;

 


[뷰]

1. 뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 

유도된, 이름을 가지는 가상 테이블이다.
2. 뷰는 저장장치 내에 물리적으로 존재하지 않지만 사용자에게 있는 것처럼 간주된다.
3. 뷰는 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용된다.
4. 뷰는 조인문의 사용 최소화로 사용상의 편의성을 최대화 한다.


[뷰(View)의 특징]
1. 뷰는 기본테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 사용하며, 

조작도 기본 테이블과 거의 같다.
2. 뷰는 가상 테이블이기 때문에 물리적으로 구현되어 있지 않다.
3. 데이터의 논리적 독립성을 제공할 수 있다.
4. 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해진다.
5. 뷰를 통해서만 데이터에 접근하게 하면 뷰에 나타나지 않는 데이터를 안전하게 보호하는 효율적인 기법으로 사용할 수 있다.
6. 기본 테이블의 기본키를 포함한 속성(열) 집합으로 뷰를 구성해야지만 삽입, 삭제, 갱신, 연산이 가능하다.
7. 일단 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.
8. 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제된다.

 

[ 뷰(View)사용시 장 단점 ]

장점
1. 논리적 데이터 독립성을 제공한다.
2. 동일 데이터에 대해 동시에 여러사용자의 상이한 응용이나 요구를 지원해 준다.
3. 사용자의 데이터관리를 간단하게 해준다.
4. 접근 제어를 통한 자동 보안이 제공된다.
단점
1. 독립적인 인덱스를 가질 수 없다.
2. ALTER VIEW문을 사용할 수 없다. 즉 뷰의 정의를 변경할 수 없다.
3. 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신, 연산에 제약이 따른다.(아예 안되는건 아니고 테이블 보단 제약이 있다는 뜻)

 

[ 뷰 정의문 ]
--문법--
CREATE VIEW 뷰이름[(속성이름[,속성이름])]AS SELECT문;
--고객 테이블에서 주소가 서울시인 고객들의 성명과 전화번호를 서울고객이라는 뷰로
만들어라--
CREATE VIEW 서울고객(성명, 전화번호)
AS SELECT 성명 전화번호
FROM 고객
WHERE 주소 = '서울시';

 

[ 뷰 ]

하나 이상의 테이블이나 다른 뷰의 데이터를 볼 수 있는 객체
테이블과 매우 유사하나 데이터가 저장되지 않는다. (예외인 Updatable 뷰가 있으나 사용X)

 

- 뷰 생성 또는 수정
<구문>
CREATE OR REPLACE VIEW [스키마.]뷰명 AS
SELECT 문장;

- 뷰 삭제
<구문>
DROP VIEW [스키마.]뷰명;

 

뷰 예제 코드 ↓

더보기

-- 뷰
SELECT a.employee_id, a.emp_name, a.department_id,
            b.department_name -- 부서명 컬럼
FROM employees a, -- employees를  a로 별첨
    departments b
WHERE a.department_id = b.department_id;

CREATE OR REPLACE VIEW emp_dept_v1 AS
SELECT a.employee_id, a.emp_name, a.department_id,
        b.department_name -- 부서명 컬럼
FROM employees a, -- employees를  a로 별첨
        departments b
 WHERE a.department_id = b.department_id;
 
 SELECT * FROM  emp_dept_v1;


[ WITH CHECK OPTION / WITH READ ONLY 옵션 ]

• WITH CHECK OPTION : 조건 컬럼값을 변경하지 못하게 하는 옵션.
뷰를 정의하는 서브 쿼리문에 WHERE절을 추가하여 기본 테이블 중 특정 조건에 만족하는

   로우(행)만으로 구성된 뷰를 생성할 수 있다.
– 이때 WHERE절에 WITH CHECK OPTION을 기술하면 그 조건에 의해 기본 테이블에서

   정보가 추출하는 것이므로 조건에 사용 되어진 컬럼값은 뷰를 통해서는 변경이 불가능하다.
• 만약 뷰를 생성할 때, 부서 번호가 20일 사원 정보만 추출했다면 해당 뷰로 부서 번호를 40번으로 변경할 수 없게 한다는 것이다.
• 부서 번호가 뷰를 생성할 때 조건으로 사용되었으므로, 절대, 부서 번호 값은 뷰를 통해서는 변경할 수 없다!
• WITH READ ONLY : 기본 테이블의 어떤 컬럼에 대해서도 뷰를 통한 내용
수정을 불가능하게 만드는 옵션.

 

예)  WHERE a.department_id = b.department_id;
// WITH CHECK OPTION    //     WITH READ ONLY

 


[ 인덱스 ]

테이블에 있는 데이터를 빨리 찾기 위한 용도의 데이터베이스 객체
책의 맨 뒤에 있는 찾아보기와 유사

별도의 저장공간에 인덱스로 잡은 컬럼 값과 저장된 블록의 주소값이 저장됨
구성과 컬럼 개수에 따른 분류 : 단일 인덱스와 결합 인덱스
유일성 여부에 따른 분류 : UNIQUE 인덱스, NON-UNIQUE 인덱스
인덱스 내부구조에 따른 분류 : B-tree 인덱스, 비트맵 인덱스, 함수기반 인덱스

 

더보기

CREATE UNIQUE INDEX → 테이블 ex2_10의 col11 컬럼에 유일 인덱스를 생성
SELECT ... FROM user_indexes / user_constraints → 인덱스와 제약조건 정보를 조회

DROP INDEX → 앞서 만든 인덱스 ex2_10_ix01을 삭제

-- 인덱스
CREATE UNIQUE INDEX ex2_10_ix01
ON ex2_10 (col11);

SELECT *
FROM user_indexes
WHERE table_name = 'EX2_10';

SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name ='JOB_HISTORY';
    
DROP INDEX ex2_10_ix01;




[ 시노님 ]

  데이터베이스 객체에 대한 별칭, 동의어
  PUBLIC 시노님 : 모든 사용자 접근, 사용
  PRIVATE 시노님 : 특정 사용자만 접근, 사용

- 시노님 생성
<구문>
  CREATE OR REPLACE [PUBLIC] SYNONYM [스키마명.]시노님명
  FOR[스키마명.]객체명;
  PUBLIC 생략 시, PRIVATE 시노님이 생성됨
  시노님 접근 권한 부여
  GRANT SELECT ON 시노님명 TO PUBLIC; 혹은 GRANT SELECT ON 시노님명 TO 사용자;

더보기

 CREATE OR REPLACE SYNONYM → channels 테이블을 가리키는 별칭 syn_channel을 생성
 SELECT * FROM syn_channel → 시노님을 통해 원본 테이블의 모든 데이터를 조회
 SELECT COUNT(*) FROM syn_channel → 시노님을 통해 원본 테이블의 행 개수를 집계

 

-- 시노님
CREATE OR REPLACE SYNONYM syn_channel
FOR channels;

SELECT * 
FROM syn_channel;
SELECT COUNT(*)
FROM syn_channel;

 

다른 유저에서 조회

-- public을 선언하지 않으면 private이기 때문에 사용하지 못함
SELECT COUNT(*)
FROM syn_channel;

-- 그래서 ora_user 안에 있는 syn_channel을 가져온다고 쓴다.
SELECT COUNT(*)
FROM ora_user.syn_channel;

 PUBLIC으로 선언된 SYN은 DROP에도 PUBLIC을 적어줘야한다.

-- 시노님
CREATE OR REPLACE SYNONYM syn_channel
FOR channels;

SELECT * 
FROM syn_channel;

SELECT COUNT(*)
FROM syn_channel;

DROP SYNONYM syn_channel;

CREATE OR REPLACE PUBLIC SYNONYM syn_channel
FOR channels;

DROP PUBLIC SYNONYM syn_channel;
-- PUBLIC으로 선언된 SYN은 DROP에도 PUBLIC을 적어줘야한다.

[ 시퀀스 ]

 - 자동으로 순번을 반환하는 객체

- 시퀀스 생성
  <구문>
  CREATE SEQUENCE [스키마명.]시퀀스명
  INCREMENT BY 증감숫자
  START WITH 시작숫자
  NOMINVALUE | MINVALUE 최소값
  NOMAXVALUE | MAXVALUE 최대값
  NOCYCLE | CYCLE
  NOCACHE | CACHE;

 

- 시퀀스 사용
  시퀀스의 현재 (순번)값 : 시퀀스명.CURRVAL
  시퀀스의 다음 (순번) 값 : 시퀀스명.NEXTVAL
- 시퀀스 삭제
  <구문>
  DROP SEQUENCE [스키마명.]시퀀스명;

 

더보기
-- 시퀀스

  CREATE SEQUENCE my_seq1
  INCREMENT BY 1
  START WITH 1
  MINVALUE 1
  MAXVALUE 1000
  NOCYCLE
  NOCACHE;

 

 

  DELETE ex2_7; -- 기존 데이터 삭제
  
    INSERT INTO ex2_7 VALUES (my_seq1.NEXTVAL,` 'a', 'a');
    INSERT INTO ex2_7 VALUES (my_seq1.NEXTVAL, 'b`', 'b');
    INSERT INTO ex2_7 VALUES (my_seq1.NEXTVAL, 'c', 'c');
-- 시퀀스

  CREATE SEQUENCE my_seq1
  INCREMENT BY 1
  START WITH 1
  MINVALUE 1
  MAXVALUE 1000
  NOCYCLE
  NOCACHE;
  
  DELETE ex2_7; -- 기존 데이터 삭제
  
    INSERT INTO ex2_7 VALUES (my_seq1.NEXTVAL,` 'a', 'a');
    INSERT INTO ex2_7 VALUES (my_seq1.NEXTVAL, 'b`', 'b');
    INSERT INTO ex2_7 VALUES (my_seq1.NEXTVAL, 'c', 'c');
    
    SELECT *
    FROM DUAL;
    
    INSERT INTO ex2_7 VALUES (my_seq1.NEXTVAL, 'd','d');
    
    SELECT my_seq1.NEXTVAL
        FROM DUAL;
        
        INSERT INTO ex2_7 VALUES (my_seq1.NEXTVAL,'e','e');

-- DB02 Quiz 3 문제

더보기

 

--테이블 : PROMOTIONS
--- 컬럼 : PROMO_ID NUMBER(6,0)
--PROMO_NAME VARCHAR2(20)
--- 제약사항 : 기본키는 PROMO_ID
CREATE TABLE PROMOTIONS (
    PROMO_ID NUMBER(6,0),
    PROMO_NAME VARCHAR2(20),
    CONSTRAINT QUIZ3_PROMO_ID PRIMARY KEY(PROMO_ID)
    );
    
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
    WHERE table_name = ' PROMOTIONS';
    
SELECT * FROM PROMOTIONS;

DB02 Quiz 4 문제

--최소값 1, 최대값 9999, 1000부터 시작해서 1씩 증가하는
--ORDERS_SEQ 라는 시퀀스를 만들어보자

더보기
  CREATE SEQUENCE ORDERS_SEQ
  INCREMENT BY 1
  START WITH 1000
  MINVALUE 1
  MAXVALUE 9999
  NOCYCLE
  NOCACHE
  NOORDER; // ORDER는 정렬을 얘기함
  
  SELECT ORDERS_SEQ.NEXTVAL
    FROM DUAL;

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

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