http://blog.naver.com/kwangii/150006612263
[10] Creating and Managing Tables (DDL)
1. Database Objects
TABLE, VIEW, SEQUENCE, INDEX, SYNONYM
2. Object Naming Rule
- ¹Ýµå½Ã ù±ÛÀÚ´Â ¹®ÀÚÀ̾î¾ß ÇÑ´Ù.
- ±æÀÌ´Â 1 ~ 30 ±ÛÀÚ ÀÌ´Ù.
- A-Z, a-z, 0-9, _, $, # ¸¸À» »ç¿ëÇÒ¼ö ÀÖ´Ù.
- µ¿ÀÏÇÑ Object¸íÀÌ Á¸ÀçÇؼ´Â ¾ÈµÈ´Ù.(´Ù¸¥ user°¡ ¼ÒÀ¯ÇÑ table°ú´Â Áߺ¹°¡´É)
- ¿À¶óŬ ¼¹öÀÇ ¿¹¾à¾î´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.
3. CREATING TABLES( create ±ÇÇÑ, ÀúÀ念¿ªÀÌ ÇÊ¿ä )
CREATE [GLOBAL TEMPORARY] TABLE [schema.]table
( column datatype [DEFAULT expr] [,...] );
*GLOBAL TEMPORARY : Àӽà table·Î ÁöÁ¤, Á¤ÀÇ´Â ¸ðµç ¼¼¼Ç¿¡¼ º¼ ¼ö ÀÖÁö¸¸,
µ¥ÀÌÅÍ´Â µ¥ÀÌÅ͸¦ »ðÀÔÇÏ´Â ¼¼¼Ç¿¡¼¸¸ º¼ ¼ö ÀÖ´Ù.
* DEFAULT °ª: ´Ù¸¥ ¿ÀÇ À̸§À̳ª, ÀÇ»ç¿Àº À߸øµÈ °ªÀÌ´Ù.
* CREATE TABLE dept
( deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13),
dymd DATE DEFAULT SYSDATE )
4. Data Dictionary
USER_ : »ç¿ëÀÚ°¡ ¼ÒÀ¯ÇÏ´Â °´Ã¼¿¡ ´ëÇÑ Á¤º¸
ALL_ : »ç¿ëÀÚ°¡ ACCESS ÇÒ ¼ö ÀÖ´Â ¸ðµç TABLE ¿¡ ´ëÇÑ Á¤º¸
DBA_ : DBA ·ÑÀ» ÇÒ´ç ¹ÞÀº »ç¿ëÀÚ¸¸ ACCESS ÇÒ ¼ö ÀÖ´Ù.
V$_ : µ¿Àû ¼º´É(Performance) ºä, DB SERVER ¼º´É ¹× Àá±Ý¿¡ °üÇÑ Á¤º¸.
* DICT Å×ÀÌºí ¾È¿¡ ¸ðµç data dictionary Á¤º¸°¡ ÀÖ´Ù.
>> À¯Àú°¡ ¼ÒÀ¯ÇÑ °³º° °´Ã¼ À¯ÇüÀ» º½.
SELECT * FROM USER_TABLES
>> À¯Àú°¡ ¼ÒÀ¯ÇÑ TABLE, VIEW, µ¿ÀǾî, ½ÃÄö½º¸¦ º½.
SELECT DISTINCT object_type
FROM USER_OBJECTS ( USER°¡ ACCESS ÇÒ ¼ö ÀÖ´Â ALL_OBJECTS )
>> User°¡ ¼ÒÀ¯ÇÑ TABLEÀ» ¼³¸í.
SELECT * FROM USER_CATALOG
--> SELECT * FROM cat À̶ó°í ½áµµ µÈ´Ù.
>> ¸ðµç Å×À̺í À̸§º¸±â SELECT * FROM TAB
>> Ä÷³ Á¤º¸ º¸±â USER_TAB_COLUMNS
5. Data Types
VARCHAR2(size) : Variable-length character data (1 ~ 4000 bytes)
CHAR(size) : Fixed-length character data (1 ~ 2000 bytes)
NUMBER(p,s) : p - precision, s - scale
DATE : B.C.4712-01-01 ~ A.D.9999.12.31
LONG : Variable-length character data (2GB)
- ÇÑ table ´ç Çϳª - constraints »ç¿ë ¸øÇÔ
- order by, group by¿¡¼ »ç¿ë¸øÇÔ - ¼ºêÄõ¸®¿¡¼ »ç¿ëÇÒ ¶§ not copy
LONG RAW : Raw binary data of variable length up to 2 gigabytes
RAW(size) : 2000 byte
CLOB : Single-byte character data up to 4 gigabytes
BLOB : Binary data up to 4 gigabytes
BFILE : binary data stored in an external file; up to 4 gigabytes
6. Subquery¸¦ »ç¿ëÇؼ Å×ÀÌºí º¹»çÇϱâ(»õ·Î¿î table ÀÇ datatype Á¤ÀÇ´Â ÇÊ¿ä¾ø´Ù)
CREATE TABLE dept30
AS
SELECT empno, ename, sal*12 ANNSAL, hiredate
FROM emp
WHERE deptno = 30
* computed fieldÀ϶§ ¹Ýµå½Ã Ä÷³ alias¸¦ Áà¾ß ÇÑ´Ù. (ANNSAL)
* computed Ä÷³À¸·Î ¸¸µé¾îÁø Ä÷³ ŸÀÔ NUMBERÀÏ ¶§ ±âÁ¸ÀÇ ÀÚ¸´¼ö´Â »ç¶óÁö°í
ÃÖ´ëÀÚ¸®¼ö·Î ÀâÈù´Ù.
* column, type, data ¸ðµç°ÍÀÌ º¹»çµÈ´Ù.(NOT NULL constraints ¸¸ »ó¼ÓµÈ´Ù.)
* key constraint´Â Á¤ÀǵÇÁö ¾Ê´Â´Ù.
* WHEREÁ¶°ÇÀ» false°¡ µÇ°Ô ¸¸µé¸é µ¥ÀÌÅÍ´Â º¹»çµÇÁö ¾Ê´Â´Ù.
7. Å×ÀÌºí¿¡ Ä÷³ Ãß°¡ Çϱâ
ALTER TABLE dept30
ADD ( job VARCHAR2(9) )
-> ¿À» Ãß°¡ÇÒ ¶§ ¸ðµç ÇàÀº Ãʱ⿡ null °ªÀ» °¡Áø´Ù.( not null Á¦¾àÁ¶°Ç X )
8. Å×ÀÌºí¿¡ ÀÖ´Â ±âÁ¸ Ä÷³ ¼öÁ¤Çϱâ
ALTER TABLE dept30
MODIFY ( ename VARCHAR2(15) )
* Á¦¾à»çÇ×.
- ¼ýÀÚŸÀÔ¿¡¼ ÀÚ¸´¼ö¸¦ ´Ã¸®´Â°Ç °¡´ÉÇÏ´Ù.
- ¼ýÀÚŸÀÔ¿¡¼ ÀÚ¸´¼ö¸¦ ÁÙÀ϶§´Â ¸ðµç data°¡ nullÀ̰ųª µ¥ÀÌÅÍ°¡ ÇѰǵµ ¾øÀ» ¶§¸¸ °¡´ÉÇÏ´Ù.
- char <--> varchar2 ·Î ¹Ù²Ü¶§´Â ¸ðµç data°¡ nullÀ̰ųª µ¥ÀÌÅÍ°¡ ÇѰǵµ ¾øÀ» ¶§¸¸ °¡´ÉÇÏ´Ù.
- default°ªµµ ¹Ù²Ü ¼ö ÀÖ´Ù.(±âÁ¸ default°ªÀº À¯ÁöµÈ´Ù.)
- column name Àº modify °¡ ¾ÈµÈ´Ù.
=> ¿À» Ãß°¡(ADD), ¼öÁ¤(MODIFY)ÇÒ ¼ö ÀÖÁö¸¸ table¿¡¼ »èÁ¦ÇÒ ¼ö ¾ø´Ù.
<oracle 8i °¡´É>
1.> ALTER TABLE table SET UNUSED (column);
OR
ALTER TABLE table SET UNUSED COLUMN column;
2.>ALTER TABLE table DROP UNUSED COLUMNS;
9. DROP TABLE
DROP TABLE dept30
10. OBJECT À̸§ ¹Ù²Ù±â
RENAME dept TO department
11. TRUNCATE TABLE
TRUNCATE TABLE department
* ROLLBACKÀ» Àý´ë·Î ÇÒ ¼ö ¾ø´Ù.
* ·Î±×¾øÀÌ Å×À̺íÀÇ Àüü µ¥ÀÌÅÍ°¡ »èÁ¦µÇ°í COMMITÀÌ µÈ´Ù.
* ÀúÀå°ø°£À» ÇØÁ¦( DELETE ¹®Àº ÇØÁ¦ÇÒ ¼ö ¾ø´Ù.)
12. Å×ÀÌºí¿¡ ÁÖ¼®¹® Ãß°¡Çϱâ
COMMENT ON TABLE emp
IS 'Employee Information'
13. Ä÷³¿¡ ÁÖ¼®¹® Ãß°¡Çϱâ
COMMENT ON TABLE emp COLUMN emp.ename
IS 'Employee Name'
14. ÁÖ¼®¹® »èÁ¦Çϱâ
COMMENT ON TABLE emp IS ' '
15. ÁÖ¼®¹®À» º¼¼öÀÖ´Â data dictionary
* Column
ALL_COL_COMMENTS
USER_COL_COMMENTS
* Table
ALL_TAB_COMMENTS
USER_TAB_COMMENTS
[11] Including Constraints
1. ¿À¶óŬÀÇ Constraint Type
NOT NULL : null value¸¦ Çã¿ëÇÏÁö ¾ÊÀ½.
UNIQUE : À¯ÀÏÇÑ °ªÀ» °¡Áö¸é¼ nullµµ Çã¿ëÇÑ´Ù.
PRIMARY KEY : NOT NULL, UNIQUE, TABLE´ç 1°³ ¼³Á¤, ÂüÁ¶ ´çÇÔ
FOREIGN KEY : Primary¿¡ ¿¬°áµÇ¾î ÀÖ¾î¼ Primary¿¡ ÀÖ´Â °ªµé¸¸ °®°í ÀÖ´Ù.(PK,UK ÂüÁ¶)
CHECK : Á¤ÇØÁø °ª ÀÌ¿ÜÀÇ °ÍÀÌ µé¾î¿À¸é Error
2. Constraint ±ÔÄ¢
- ConstraintÀ» »ý¼ºÇÒ ¶§ À̸§À» ÁÖÁö ¾ÊÀ¸¸é ¿À¶óŬ¼¹ö´Â SYS_Cn À̶ó°í À̸§À» ÀÚµ¿ »ý¼ºÇÑ´Ù.
- Column level °ú Table level·Î Constraint¸¦ Á¤ÀÇÇÑ´Ù.
- constraint¸¦ º¼ ¼ö ÀÖ´Â Data Dictionary´Â
USER_CONSTRAINTS,USER_CONS_COLUMNS ÀÌ´Ù.
3. Constraint Á¤ÀÇ
* Column Level
column [CONSTRAINT constraint_name] constraint_type,
* Table Level
column,...
[CONSTRAINT constraint_name] constraint_type (column, ...),
(column, ...),
* not nullÀº ¹Ýµå½Ã column level·Î Á¤ÀǸ¦ ³»·Á¾ß ÇÑ´Ù.
4. NOT NULL Constraint : column level
5. UNIQUE Constraint : index ÀÚµ¿ »ý¼º
CREATE TABLE dept (
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE (dname) )
6. PRIMARY KEY Constraint
CREATE TABLE dept (
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE (dname) ,
CONSTRAINT dept_deptno_pk PRIMARY KEY (deptno) )
7. FOREIGN KEY Constraint
CREATE TABLE emp (
empno NUMBER(4),
ename VARCHAR2(10) [CONSTRAINT epm_ename_nn] NOT NULL,
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(7,2) NOT NULL,
CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
REFERENCES dept (deptno) )
--> dept.deptno¸¦ emp.deptno°¡ Foreign key·Î »ç¿ëÇÏ°Ú´Ù´Â ¶æ.
* column level·Î Á¤ÀÇÇÒ ¶§´Â...(FOREIGN KEY Å°¿öµå´Â »ý·«)
deptno NUMBER(7,2) NOT NULL
CONSTRAINT emp_deptno_fk REFERENCES dept (deptno),
* ON DELETE CASCADE
Foreign key·Î ¿¬°áµÈ parent data°¡ »èÁ¦µÉ ¶§ child dataµµ ¸ðµÎ »èÁ¦ µÇ°Ô ¸¸µç´Ù.
8. CHECK Constraint
..., deptno NUMBER(2),
CONSTRAINT emp_deptno_ck
CHECK (deptno BETWEEN 10 AND 99), ...
--> deptnoÀÇ °ªÀº 10¿¡¼ 99 »çÀÌ¿¡ ÀÖ´Â °ªµé¸¸ ÀÔ·ÂÀÌ °¡´ÉÇÏ´Ù´Â ¶æ.
* CURRVAL, NEXTVAL, LEVEL, ROWNUMµî Pseudocolumn¿£ Çã¿ëµÇÁö ¾Ê´Â´Ù.
* SYSDATE, UID, USER, USERENV ÇÔ¼öµéÀ» È£ÃâÇÒ¼ö ¾ø´Ù.
* Á¦¾àÁ¶°ÇÀ» Ãß°¡(ADD), »èÁ¦(DROP)ÇÒ ¼ö ÀÖÁö¸¸ ¼öÁ¤ÇÒ ¼ö´Â ¾ø´Ù.
* Á¦¾àÁ¶°ÇÀ» ¼³Á¤(ENABLE) ¶Ç´Â ÇØÁ¦(DISABLE)ÇÕ´Ï´Ù.
* MODIFT ÀýÀ» »ç¿ëÇÏ¿© NOT NULL Á¦¾àÁ¶°ÇÀ» Ãß°¡ÇÕ´Ï´Ù.
9. ADD Constraint
*ALTER TABLE table_name
ADD [CONSTRAINT constraint] type (column),
ALTER TABLE emp
ADD CONSTRAINT emp_mgr_fk
FOREIGN KEY(mgr) REFERENCES emp(empno)
* Constraint ¼öÁ¤Àº ÇÒ ¼ö ¾ø´Ù.
* not null constraintÀÏ °æ¿ì ADD·Î ÇÏÁö ¾Ê°í MODIFY·Î ÇÑ´Ù.
(±âÁ¸ Çà¿¡ null data °ªÀÌ ¾ø¾î¾ß ÇÑ´Ù.)
10. DROP Constraint
*ALTER TABLE table_name
DROP (PRIMARY KEY| UNIQUE (column) |
CONSTRAINT constraint) [CASCADE];
ALTER TABLE emp
DROP CONSTRAINT emp_mgr_fk
* Primary¸¦ »èÁ¦ÇÒ ¶§ Foreign Key°ü°è(Á¾¼ÓµÈ Á¦¾àÁ¶°Ç)ÀÇ Constraint±îÁö DROP ÇÏ°í ½ÍÀ¸¸é...
ALTER TABLE dept
DROP PRIMARY KEY CASCADE
* CASCADE CONSTRAINTS ÀýÀº DROP COLUMN Àý°ú ÇÔ²² »ç¿ëµË´Ï´Ù.
ALTER TABLE test1 DROP (pk) CASCADE CONSTRAINTS;
11. DISABLE CONSTRAINT(CREATE TABLE, ALTER TABLE ¹®¿¡¼ »ç¿ë)
: ENABLE CONSTRAINT Çϱâ Àü±îÁö ½ÇÇàÀ» ¸ØÃá´Ù.
ALTER TABLE emp
DISABLE CONSTRAINT emp_empno_pk CASCADE
12. ENABLE CONSTRAINT(CREATE TABLE, ALTER TABLE ¹®¿¡¼ »ç¿ë)
ALTER TABLE emp
ENABLE CONSTRAINT emp_empno_pk
* ENABLE ÇÒ ¶§´Â... ¸ðµç data¸¦ üũÇϱ⠶§¹®¿¡ ½Ã°£ÀÌ ¿À·¡ °É¸°´Ù.
*
13. USER_CONSTRAINTS Data Dictionary
SELECT constraint_name, constraint_type, search_condition
FROM user_constraints
WHERE table_name = 'EMP'
--------------------------------------------------------
CONSTRAINT_NAME C SEARCH_CONDITION
------------------------- - --------------------------
SYS_C00674 C EMPNO IS NOT NULL
SYS_C00675 C DEPTNO IS NOT NULL
EMP_EMPNO_PK P
--------------------------------------------------------
14. USER_CONS_COLUMNS Data Dictionary
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'EMP'
--------------------------------------------------------
CONSTRAINT_NAME COLUMN_NAME
EMP_DEPTNO_FK DEPTNO
EMP_EMPNO_PK EMPNO
EMP_MGR_FK MGR
SYS_C00674 EMPNO
SYS_C00675 DEPTNO
--------------------------------------------------------
[12] Creating Views
* Oracle8ºÎÅÍ´Â View¿¡µµ Data¸¦ °®°í ÀÖÀ» ¼ö ÀÖ´Ù.
* View¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯?
- µ¥ÀÌÅͺ£À̽º access¸¦ Á¦ÇÑÇÑ´Ù.
- º¹ÀâÇÑ Äõ¸®¸¦ ½±°Ô ¸¸µç´Ù.
- µ¥ÀÌÅÍÀÇ µ¶¸³À» Çã¿ëÇϱâ À§ÇØ
- µ¿ÀÏÇÑ µ¥ÀÌÅͷκÎÅÍ ´Ù¾çÇÑ °á°ú¸¦ ¾ò±â À§ÇØ
* view¸¦ ¸¸µé ¶§ ORDER BYÀýÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù.
* Simple View¿¡´Â DML ¹®ÀåÀ» ¼öÇà ÇÒ ¼ö ÀÖÁö¸¸, ÇÔ¼ö ¶Ç´Â µ¥ÀÌÅÍ ±×·ìÀ» Æ÷ÇÔÇÏÁö ¸øÇÑ´Ù.
(º¹ÇÕºä<Complex VIEW> ´Â ÇÔ¼ö ¶Ç´Â µ¥ÀÌÅÍ ±×·ìÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.)
* GROUPÇÔ¼ö, GROUP BYÀý, DISTINCT keywordµîÀ» »ç¿ëÇÑ view¿¡´Â ÇàÀ» delete ÇÒ ¼ö ¾ø´Ù.
* ºä¸¦ »ç¿ëÇÑ µ¥ÀÌÅÍ ¿¢¼¼½º
- USER_VIEWS¿¡¼ ºä Á¤ÀǸ¦ °Ë»öÇÑ´Ù.(select ¹®ÀÇ ÅؽºÆ®´Â LONG ¿¿¡ ÀúÀåµÈ´Ù.)
- ºäÀÇ ±âº» Å×ÀÌºí¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀ» È®ÀÎÇÑ´Ù.
- µ¥ÀÌÅ͸¦ ±âº» Å×ÀÌºí¿¡¼ °Ë»ö ¶Ç´Â °»½ÅÇÑ´Ù.
1. CREATE VIEW ¹®Àå
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[ (alias[, alias]...) ]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
OR REPLACE : ¸¸µé·Á°í ÇÏ´Â view°¡ ÀÌ¹Ì Á¸ÀçÇÒ ¶§ recreateÇÑ´Ù.
FORCE : base tableÀÌ Á¸ÀçÇÏÁö ¾Ê¾Æµµ view¸¦ °Á¦·Î ¸¸µç´Ù.
NOFORCE : base tableÀÌ ¹Ýµå½Ã Á¸ÀçÇؾ߸¸ view¸¦ ¸¸µé ¼ö ÀÖ´Ù.
WITH CHECK OPTION : view¸¦ ¸¸µé ¶§ whereÁ¶°Ç¿¡ ÀÖ´Â value¸¦
View¸¦ ÅëÇؼ DML ¹®ÀåÀ¸·Î ¼öÁ¤ÇÏ´Â °ÍÀ» ¸·´Â´Ù.
WITH READ ONLY : view¸¦ ÅëÇؼ DML¹®ÀåÀ» ¼öÇàÇÏ´Â °ÍÀ» ¸·´Â´Ù.
2. Creating View ¿¹Á¦1
CREATE VIEW empvu10
AS SELECT empno, ename, job
FROM emp
WHERE deptno = 10 ;
--> ÀÌ·¸°Ô ¸¸µé¾îÁø viewÀÇ columnÀ̸§Àº empno, ename, jobÀÌ µÈ´Ù.
3. Creating View ¿¹Á¦2
CREATE VIEW salvu30
AS SELECT empno employee_number, ename name, sal salary
FROM emp
WHERE deptno = 30 ;
--> column alias¸¦ ÁØ employee_number, name, salary°¡ viewÀÇ columnÀ̸§ÀÌ µÈ´Ù.
4. VIEW ¼öÁ¤Çϱâ (OR REPLACE)
CREATE OR REPLACE VIEW empvu10
(employee_number, employee_name, job_title)
AS SELECT empno, ename, job
FROM emp
WHERE deptno = 10 ;
5. Complex VIEW
CREATE VIEW detp_sum_vu
(naem, minsal, maxsa, avgsal)
AS SELECT d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal)
FROM emp e, dept d
WHERE e.deptno = d.deptno
GROUP BY d.dname ;
6. WITH CHECK OPTION »ç¿ë¿¹
CREATE OR REPLACE VIEW empvu20
AS SELECT *
FROM emp
WHERE deptno = 20
WITH CHECK OPTION CONSTRAINT empvu20_ck ;(deptno °¡ 20¸¸ ÀÛ¾÷ °¡´É)
( constraint nameÀ» ÁÖÁö ¾ÊÀ¸¸é SYS_CnÀ¸·Î ¸¸µé¾î Áø´Ù. )
* ¿¹¸¦µé¾î ´ÙÀ½°ú °°Àº update¹®ÀåÀ» ¼öÇàÇϸé error°¡ ³´Ù.
UPDATE empvu20
SET deptno = 10
WHERE empno = 7788 ;
--> ORA-01402: view WITH CHECK OPTION where-clause violation
7. WITH READ ONLY »ç¿ë¿¹
CREATE OR REPLACE VIEW empvu10
(employee_number, employee_name, job_title)
AS SELECT empno, ename, job
FROM emp
WHERE deptno = 10
WITH READ ONLY ;
* ¿¹¸¦µé¾î ´ÙÀ½°ú °°Àº DELETE¹®ÀåÀ» ¼öÇàÇϸé error°¡ ³´Ù.
DELETE FROM empvu10
WHERE employee_number = 7782 ;
--> ORA-01752: Cannot delete from view without exactly one key-preserved table
8. View ¾ø¾Ö±â
DROP VIEW empvu10 ;
9. ¸¸µé¾îÁø View¸¦ º¼¶§
SELECT * FROM salvu30 ;
* ÀζóÀÎ view : FROM Àý¿¡ »ç¿ë, °´Ã¼°¡ ¾Æ´Ô.
10. View¸¦ ÅëÇÑ DML ÀÛ¾÷ ¼öÇà¿¡ °üÇÑ ±ÔÄ¢
*ºä°¡ ´ÙÀ½À» Æ÷ÇÔÇÑ °æ¿ì ÇàÀ» Á¦°ÅÇÒ ¼ö ¾ø½¿.
- ±×·ìÇÔ¼ö - GROUP BYÀý - DISTINCT Å°¿öµå - ÀÇ»ç¿ ROWNUM Å°¿öµå
*ºä°¡ ´ÙÀ½À» Æ÷ÇÔÇÑ °æ¿ì µ¥ÀÌÅ͸¦ ¼öÁ¤ÇÒ ¼ö ¾ø½¿.
- À§¿¡¼ ¾ð±ÞµÈ ¸ðµç Á¶°Ç(Á¦°ÅÇÒ ¼ö ¾ø½¿)
- ROWNUM ÀÇ»ç ¿ : ÇÏÀ§ ÁúÀÇ¿¡¼ ¹ÝȯµÇ´Â °¡ Çà¿¡ 1¿¡¼ ½ÃÀÛÇÏ´Â ¼øÂ÷°ªÀ» ÇÒ´ç.
*ºä°¡ ´ÙÀ½°ú °°Àº °æ¿ì µ¥ÀÌÅ͸¦ Ãß°¡ÇÒ ¼ö ¾ø½¿.
- ºä°¡ À§¿¡¼ ¾ð±ÞÇÑ Æ÷ÇÔÇÏ´Â °æ¿ì.(Á¦°Å, ¼öÁ¤)
- ±âº» Å×ÀÌºí¿¡¼ ºä¿¡ ÀÇÇØ ¼±ÅõÇÁö ¾ÊÀº ¿¿¡ NOT NULL Á¦¾à Á¶°ÇÀÌ ÀÖ´Â °æ¿ì.
11. "TOP-N" ºÐ¼® ¼öÇà
SELECT [column_list], ROWNUM
FROM (SELECT [column_list] FROM table
ORDER BY TOP-N_column)
WHERE ROWNUM <= N ( where ÀýÀº < ¶Ç´Â <= )
[13] Other Database Objects (Sequence, Index, Synonym)
1. Sequence?
- uniqueÇÑ ¼ýÀÚ¸¦ ÀÚµ¿À¸·Î ºÎ¿©ÇÑ´Ù.
- °øÀ¯ °¡´ÉÇÏ´Ù.
- primary key ¼º°ÝÀ» °®´Â´Ù.
- cache ¼³Á¤À» ÇÒ ¼ö Àֱ⠶§¹®¿¡ ºü¸¥ ¼Óµµ¸¦ ³¾ ¼ö ÀÖ´Ù.
2. CREATE SEQUENCE ¹®Àå
CREATE SEQUENCE sequence
[INCREMENT BY n] : default 1
[START WITH n] : default 1
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALEU}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE{] ; : default 20°³ÀÇ cache
INCREMENT BY n : n¸¸Å Áõ°¡ ÇÑ´Ù.
START WITH n : óÀ½ ½ÃÀÛÇÏ´Â ¼ýÀÚ´Â nÀÌ´Ù.
MAXVALUE n : MAX°ªÀº nÀÌ´Ù.
NOMAXVALUE : MAX°ªÀº ¹«ÇÑ´ë´Ù. (10^27 OR -1) --> default
MINVALUE n : MIN°ªÀº nÀÌ´Ù.
NOMINVALUE : MIN°ªÀº ¹«ÇÑ´ë´Ù. (-(10^26) OR 1 ) --> default
CYCLE | NOCYCLE : MAX³ª MIN°ªÀ¸·Î °¬À»¶§ ´Ù½Ã óÀ½ºÎÅÍ »õ·Î
½ÃÀÛÇÒ °ÇÁö¸¦ ¼³Á¤ÇÑ´Ù. default´Â NOCYCLE
CACHE n | NOCACHE : n¸¸ÅÀÇ CACHE¸¦ ÁÙ °ÍÀÎÁö¸¦ ¼³Á¤ÇÑ´Ù.
--> default´Â cache 20À¸·Î Àâ´Â´Ù.
3. CREATE SEQUENCE ¿¹Á¦
CREATE SEQUENCE dept_deptno
INCREMENT BY 1
START WITH 91
MAXVALUE 100
NOCACHE
NOCYCLE ;
4. USER_SEQUENCES data dictionary
SELECT sequence_name, min_value, max_value, increment_by, last_number
FROM USER_SEQUENCES ;
* last_number´Â ´ÙÀ½¿¡ sequence °¡´É ÇÑ ¼ýÀÚ¸¦ º¸¿©ÁØ´Ù.
5. NEXTVAL °ú CURRVAL
NEXTVAL : Sequence°¡ 1°³ Áõ°¡µÈ´Ù.
CURRVAL : ÇöÀç sequence °ªÀ» º¸¿©ÁØ´Ù.
* »ç¿ë°¡´É
- SELECT¹®Àå¿¡¼ SELECT list
- INSERT¹®Àå¿¡¼ SELECT list, valuesÀý list
- UPDATE¹®Àå¿¡¼ SETÀý
* »ç¿ëºÒ°¡
- ViewÀÇ SELECT list
- SELECT¹®Àå¿¡¼ DISTINCT keyword
- SELECT¹®Àå¿¡¼ GROUP BY, HAVING, ORDER BYÀý
- SELECT, DELETE, UPDATE¹®Àå ¾È¿¡ ÀÖ´Â subquery
- CREATE TABLE, ALTER TABLE¹®Àå¿¡¼ DEFAULT expression
* CACHE°¡ 20À¸·Î Á¤ÀÇ ÇßÀ» ¶§...
¨ç INSERT INTO dept
VALUES (dept_deptno.NEXTVAL, ...) --> 1
¨è SELECT last_number FROM user_squences --> 21
¨é SELECT dept_deptno.CURRVAL FROM dual --> 1
¨ê SELECT dept_deptno.NEXTVAL FROM dual --> 2
6. SEQUENCE »ç¿ë¿¹
INSERT INTO dept( deptno, dname, loc )
VALUES (dept_deptno.NEXTVAL, 'MARKETING', 'SAN DIEGO')
--> Áõ°¡µÈ sequence°ªÀÌ deptno¿¡ ÀúÀåµÈ´Ù.
* ÇöÀçÀÇ sequence°ªÀ» º¸·Á¸é...
SELECT dept_deptno.CURRVAL FROM dual ;
* SELECT¿¡¼ sequence°ª Áõ°¡½ÃÅ°±â
SELECT dept_deptno.NEXTVAL FROM dual ;
7. SEQUENCE ¼öÁ¤Çϱâ
ALTER SEQUENCE dept_deptno
INCREMENT BY 1
MAXVALUE 999999
NOCACHE
NOCYCLE ;
* sequence¿¡ ´ëÇÑ ALTER privilege¸¦ °®°í ÀÖ¾î¾ß ÇÑ´Ù.
* maxvalue°¡ current valueº¸´Ù ÀûÀ» ¶© ¹Ýµå½Ã dropÇÏ°í re-createÇØ¾ß ÇÑ´Ù.
* START WITH ¹®À» º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù.( »èÁ¦ ÈÄ ´Ù½Ã »ý¼º )
8. SEQUENCE Á¦°ÅÇϱâ
DROP SEQUENCE dept_deptno ;
9. INDEX ?
- Retrieve¸¦ »¡¸® Çϱâ À§Çؼ
- DISK I/O¸¦ ÁÙÀϼö ÀÖ´Ù.
- Å×À̺í°ú´Â µ¶¸³ÀûÀÌ´Ù.
* PRIMARY KEY or UNIQUE constraint »ý¼º½Ã ¿À¶óŬ ¼¹ö¿¡¼ ÀÚµ¿À¸·Î »ý¼ºµÇ´Â°Í°ú, CREATE INDEX¸¦ »ç¿ëÇؼ ¸¸µé¾îÁö´Â index°¡ ÀÖ´Ù.
* INDEX´Â ¸¹ÀÌ ¸¸µç´Ù°í ÁÁÀº°Ô ¾Æ´Ï´Ù.
* INDEX´Â ÀÌ·¸¶§ ¸¸µå´Â°Ô ÁÁ´Ù.
- WHEREÀýÀ̳ª JOINÁ¶°Ç¿¡ ÀÚÁÖ³ª¿À´Â column
- columnÀÇ ¹üÀ§°¡ Ŭ¶§
- null value¸¦ ¸¹ÀÌ °®°í ÀÖ´Â column
- Àüü row¿¡¼ 2~4% Á¤µµÀÇ row¸¦ ãÀ»¶§
10. CREATE INDEX
CREATE INDEX index
ON table (column[, column]...) ;
CREATE INDEX emp_ename_idx
ON emp (ename) ;
11. USER_INDEXES and USER_IND_COLUMNS data dictionary
SELECT ic.index_name, ic.column_name, ic.column_position, ix.uniqueness
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = 'EMP' ;
12. INDEX Á¦°ÅÇϱâ
DROP INDEX emp_ename_idx ;
13. SYNONYM ?
user°¡ synonymÀ» »ç¿ëÇÏ¸é ½ºÅ°¸¶¸¦ º°µµ·Î ¸í½ÃÇÒ ÇÊ¿ä°¡ ¾ø¾îÁø´Ù.
14. CREATE SYNONYM
CREATE [PUBLIC] SYNONYM synonym
FOR object ;
* PUBLICÀº ¸ðµç user¿¡°Ô synonym±ÇÇÑÀ» ÁÖ´Â °ÍÀÌ°í, DBA±ÇÇÑÀÌ ÀÖ´Â »ç¶÷¸¸
»ç¿ëÀÌ °¡´ÉÇÏ´Ù.
* PUBLICÀ» ¾È¾²¸é ¸¸µç »ç¶÷¸¸ »ç¿ëÇÑ´Ù.
CREATE SYNONYM d_sum
FOR dept_sum_vu ;
--> dept_sum_vu¶ó´Â viewÅ×À̺íÀ» d_sumÀ¸·Î »ç¿ë ÇÏ°Ú´Ù.
15. PUBLIC SYNONYM
CREATE PUBLIC SYNONYM dept
FOR alice.dept
--> alice°¡ ¸¸µç deptÅ×À̺íÀ» dept·Î ¸ðµç À¯Àú¿¡°Ô ¸í½Ã ÇÏ°Ú´Ù.
16. SYNONYM Á¦°Å
DROP SYNONYM d_sum ;
* publicÀ¸·Î Á¤ÀÇµÈ SYNONYMÀº DBA¸¸ Á¦°Å°¡ °¡´ÉÇÏ´Ù.
[14] Controlling User Access (GRANT, REVOKE)
* ½Ã½ºÅÛ ±ÇÇÑ(System Privilege): µ¥ÀÌÅÍ º£À̽º¸¦ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù.
* °´Ã¼ ±ÇÇÑ(Object Privilege) : µ¥ÀÌÅÍ º£À̽º °´Ã¼ ³»¿ëÀ» Á¶ÀÛÇÒ ¼ö ÀÖ´Ù.
1. System Privilege? --> DBA񀀥
- Create new users ( CREATE USER )
- Remove users ( DROP USER )
- Remove tables ( DROP ANY TABLE )
- Backup tables ( BACKUP ANY TABLE )
2. Creating User
CREATE USER scott
IDENTIFIED BY tiger ;
3. system privilege¿¡¼ÀÇ GRANT
GRANT privilege [, privilege...]
TO user [, user...]
[WITH ADMIN OPTION] ;
* WITH ADMIN OPTION : dba°¡ ±ÇÇÑÀ» ÁÖ´Â user¿¡°Ôµµ admin ±ÇÇÑÀ» ÁÙ ¼ö ÀÖ´Ù.
* user system privilege(DBA °¡ USER¿¡°Ô ÇÒ´ç ÇÒ ¼ö ÀÖ´Â ±ÇÇÑ)
CREATE SESSION : Å×ÀÌÅͺ£À̽º¿¡ connectÇÏ´Â ±ÇÇÑ
CREATE TABLE : Å×ÀÌºí ¸¸µå´Â ±ÇÇÑ
CREATE SEQUENCE : sequence ¸¸µå´Â ±ÇÇÑ
CREATE VIEW : view ¸¸µå´Â ±ÇÇÑ
CREATE PROCEDURE : stored prcedure, function ¸¸µå´Â ±ÇÇÑ
GRANT create table, create sequence, create view
TO scott
--> scott¿¡°Ô table, sequence, view¸¸µå´Â ±ÇÇÑÀ» ÁØ´Ù.
4. ROLE : »ç¿ëÀÚ¿¡°Ô ºÎ¿©ÇÒ ¼ö ÀÖ´Â °ü·Ã ±ÇÇÑÀ» Çϳª·Î ¹¾î ¸í¸íÇÑ ±×·ì
Grant¸¦ ÁÙ role user¸¦ ¸¸µçÈÄ ±× role user¿¡ grant¸¦ ÁÖ°í,
role userÀÇ ±ÇÇÑÀ» °¢°¢ÀÇ user¿¡°Ô ³Ñ°ÜÁØ´Ù.
¨ç SQL> CREATE ROLE manager ;
Role created.
¨è SQL> GRANT create table, create view TO manager ;
Grant succeeded.
¨é SQL> GRANT mananger TO brake, clock ;
Grant succeeded.
5. User Password º¯°æÇϱâ
ALTER USER user IDENITIFIED BY password ;
¿¹) ALTER USER scott IDENTIFIED BY lion ;
6. Object Privileges?
* °´Ã¼¸¶´Ù ´Ù¸£´Ù.
* ¼ÒÀ¯ÀÚ´Â °´Ã¼¿¡ ´ëÇÑ ¸ðµç ±ÇÇÑÀ» °®´Â´Ù.
* ¼ÒÀ¯ÀÚ´Â ÀÚ½ÅÀÇ °´Ã¼¿¡ ´ëÇÑ Æ¯Á¤ ±ÇÇÑÀ» ºÎ¿©ÇÒ ¼ö ÀÖ´Ù.
5. User Password º¯°æÇϱâ
ALTER USER user IDENITIFIED BY password ;
¿¹) ALTER USER scott IDENTIFIED BY lion ;
6. Object Privileges?
* °´Ã¼¸¶´Ù ´Ù¸£´Ù.
* ¼ÒÀ¯ÀÚ´Â °´Ã¼¿¡ ´ëÇÑ ¸ðµç ±ÇÇÑÀ» °®´Â´Ù.
* ¼ÒÀ¯ÀÚ´Â ÀÚ½ÅÀÇ °´Ã¼¿¡ ´ëÇÑ Æ¯Á¤ ±ÇÇÑÀ» ºÎ¿©ÇÒ ¼ö ÀÖ´Ù.
7. Object Privilege¿¡¼ÀÇ GRANT
GRANT object_priv [(columns)| ALL]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION] ;
* sue, rich ¶ó´Â user¿¡°Ô emp Å×À̺íÀ» select ±ÇÇÑÀ» ÁØ´Ù.
GRANT select
ON emp
TO sue, rich ;
* scott, manager¶ó´Â user¿¡°Ô dept Å×À̺íÀÇ dname,loc Ä÷³À» updateÇÒ ¼ö ÀÖ°Ô ±ÇÇÑÀ» ÁØ´Ù.
GRANT update (dname, loc)
ON dept
TO scott, manager ;
* WITH GRANT OPTION
GRANT select, insert
ON dept
TO scott
WITH GRANT OPTION ;
--> scott¿¡°Ô dept Å×À̺íÀÇ select, insert±ÇÇÑÀ» ÁÖ¸é¼ scott°¡ ´Ù¸¥ À¯Àú¿¡°Ôµµ
ÀÌ ±ÇÇÑÀ» ÁÙ ¼ö ÀÖ°Ô ÇÑ´Ù.
* PUBLIC : ¸ðµç À¯Àú¿¡°Ô ±ÇÇÑÀ» ºÎ¿©ÇÑ´Ù.
GRANT select
ON alice.dept
TO PUBLIC ;
--> ¸ðµçÀ¯Àú¿¡°Ô alice°¡ ¸¸µç dept Å×À̺íÀÇ select±ÇÇÑÀ» ÁØ´Ù.
* ¸ðµç À¯Àú¿¡°Ô ¸ðµç object±ÇÇÑÀ» ÁÖ±â
GRANT ALL
ON emp
TO PUBLIC ;
8. ±ÇÇÑ ¾ø¾Ö±â (REVOKE)
REVOKE {privilege [, privilege...] | ALL}
ON object
FROM {user[, user...]|role|PUBLIC}
[CASCADE CONSTRAINTS]
REVOKE select, insert
ON dept
FROM scott ; --> scott¿¡°Ô¼ deptÅ×À̺íÀÇ select, insert±ÇÇÑÀ» ¾ø¾Ø´Ù.
* CASCADE CONSTRAINTS : ÀÌ ¿É¼ÇÀ» ¾Ê¾²¸é revokeÇÒ ¶§ forien key
°ü°èÀÇ tableÀ» revokeÇÒ ¼ö ¾ø´Ù.
9. Privilege Grant¸¦ º¼ ¼ö ÀÖ´Â Data Dictionary
ROLE_SYS_PRIVS : System privilege ±ÇÇÑ¿¡ ´ëÇÑ Á¤º¸
ROLE_TAB_PRIVS : table(object) privilege ±ÇÇÑ¿¡ ´ëÇÑ Á¤º¸
USER_ROLE_PRIVS : roleÁ¤º¸
USER_TAB_PRIVS_MADE : ³»°¡ ´Ù¸¥ »ç¶÷¿¡°Ô ÁØ TABLE ±ÇÇÑ¿¡ ´ëÇÑ Á¤º¸
USER_TAB_PRIVS_RECD : ³»°¡ ´Ù¸¥ »ç¶÷¿¡°Ô ¹ÞÀº TABLE ±ÇÇÑ¿¡ ´ëÇÑ Á¤º¸
USER_COL_PRIVS_MADE : ³»°¡ ´Ù¸¥ »ç¶÷¿¡°Ô ÁØ COLUMN ±ÇÇÑ¿¡ ´ëÇÑ Á¤º¸
USER_COL_PRIVS_RECD : ³»°¡ ´Ù¸¥ »ç¶÷¿¡°Ô ÁØ COLUMN ±ÇÇÑ¿¡ ´ëÇÑ Á¤º¸
|
|
|