Oracle SQL DDL - accidentlywoo/sec GitHub Wiki
[DML] ๊ณ์ ๋ง๋ค๊ธฐ
Data Dictionary -> user_tables
sqlplus
system ๊ณ์ ์ ์
๊ณ์ ์ ๋ณดํ์ธ
show user
์ฑ๊ณต ์คํ๊ฒฐ๊ณผ
USER is "SYSTEM"
test ๊ณ์ ๋ง๋ค๊ธฐ
CREATE USER test IDENTIFIED BY test;
์ฑ๊ณต ์คํ๊ฒฐ๊ณผ
User created.
์์ฑ๋ 'test'๊ณ์ ์ ์ ์ ์๋
conn test/test
์คํจ ๊ฒฐ๊ณผ
user TEST lacks CREATE SESSION privilege; logon denied
์ฌ์ฉ์๋ค์ ์ฐ๊ฒฐ์ ์ธ์ ์ด ํ์ํ๋ค -> Session
system ๊ณ์ ์ผ๋ก ๋ค์ ์ ์
test๊ณ์ ์ ๊ถํ ์ฃผ๊ธฐ
GRANT CREATE SESSION to test;
์ฑ๊ณต ๊ฒฐ๊ณผ
Grant succeeded.
test ๊ณ์ ์ ์ ์๋
conn test/test
์ฑ๊ณต ๊ฒฐ๊ณผ
Connected.
์ธ์ ์ด ์ฃผ์ด์ง๊ณ , ์ ์์ด ์ฑ๊ณตํ๋ค. ํ ์ด๋ธ์ ์์ฑํด ๋ณด์.
CREATE TABLE test(a number);
์คํจ ๊ฒฐ๊ณผ
CREATE TABLE test(a number)
*
ERROR at line 1:
ORA-~~: insufficient privileges;
์์ฑ๊ถํ์ ์ค์ผ ํ๋ค.
system ๊ณ์ ์ผ๋ก ๋ค์ ์ ์
GRANT CONNECT, RESOURCE to test;
GRANT๋ ROLE์ ์ค ์๋ ์๊ณ , ๊ฐ๋ณ์ ์ธ ๊ถํ์ ์ค ์๋ ์๋ค.
๋ค์ test ๊ณ์ ์ผ๋ก ์ ์ ํ ์ด๋ธ์ ์์ฑํด ๋ณด์.
CREATE TABLE test(a number);
์ฑ๊ณต ๊ฒฐ๊ณผ
Table created.
ํ ์ด๋ธ ์์ฑ
CREATE TABLE ํ
์ด๋ธ๋ช
(
a CHAR,
a1 CHAR(3),
a2 VARCHAR2(3)
)
CHARํ์ ์ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ์ง์ ํ์ง ์์๋ ํ ์ด๋ธ ์์ฑ์ด ๊ฐ๋ฅ, (CHAR๋ MAXIMUM 1์๋ฆฌ๋ก ์์ฑ๋จ / NUMBER ๋ฌธ์๊ธธ์ด๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์ต๋๊ฐ์ผ๋ก ์์ฑ)
But VARCHAR๋ ๋ฌธ์๊ธธ์ด๋ฅผ ๊ผญ ์ง์ ํด์ค์ผ ํ๋ค.(์์ฑ ์๋ฌ)
- CHAR์ ๊ณ ์ ๋ฌธ์๊ธธ์ด
- VARCHAR (์ค๋ผํด์ VARCHAR2์ฌ์ฉ) ๋ฌธ์ ๊ธธ์ด๋งํผ ์ ์ฅ
์ค๋ผํด์์ ์ ๊ณตํ๋ ํจ์๋ฅผ ์ด์ฉํด์ ์ปฌ๋ผ์ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ์ ์ ์๋ค.
SELECT LENGTH(a), LENGTH(a1), LENGTH(a2) FROM ํ
์ด๋ธ๋ช
;
CREATE TABLE ํ
์ด๋ธ๋ช
(
dt DATEm
dt1 TIMESTAMP
);
-DATE : DATE์๋ ๋ ์์ผ ์๋ถ์ด ์ ๋ณด๊ฐ ๋ค์ด์์ง๋ง, ์ถ๋ ฅํ ๋๋ ๋ ์์ผ๋ง ๋ณด์ฌ์ค๋ค. -TIMESTAMP : ๋ฐ๋ฆฌ ์ธ์ปจ์ฆ ๋จ์์ ์์ธํ ์๊ฐ์ ๋ณด๋ฅผ ๋ณด๊ณ ์ถ์ ๋, TIMESTAMP๋ฅผ ์ฌ์ฉํ์.
๋ ์งํ์ ์ ๋ฐ์ดํฐ๋ ์๋ฆฟ์ ์ง์ ์ ๋ํ๋ฉด ์๋๋ค.
DATEํ์ ์ผ๋กํ ๊น? VARCHARํ์ ์ผ๋กํ ๊น?
- ์๋์ผ๋ก ๋ ์ง๋ฐ๊ธ -> DATE / ์ ๋ ฅ์ ๋ฐ์์ผ ๋๋ ๊ฒฝ์ฐ -> ๋ฌธ์ํ์
INSERT INTO ํ
์ด๋ธ๋ช
VALUES(SYSDATE, SYSTIMESTAMP);
SELECT * FROM ํ
์ด๋ธ๋ช
;
์ฑ๊ณต ๊ฒฐ๊ณผ
DT DT1
------------------------------------------
20/06/08 20/06/08 10:45:52.109000
SELECT TO_CHAR(dt,'YY/MM/DD HH24:MI:SS'), dt1 FROM ํ
์ด๋ธ๋ช
;
DT DT1
------------------------------------------
20/06/08 10:45:52 20/06/08 10:45:52.109000
์์ฃผ ์ ํํ ํํ์ TIMESTAMP๋ฅผ ์ฌ์ฉํ๋ค.
ํ ์ด๋ธ ๋ง๋ค๊ธฐ + ์ ์ฝ์กฐ๊ฑด
Data Dictionary -> User Constraints
์ ์ฝ ์กฐ๊ฑด ์ ์
๊ตฌ๋ฌธ
CREATE TABLE [schema] table
(column datatype [DEFAULT expr]
[column_constraint].
...
[table_constraint][,...]);
์ด ๋ ๋ฒจ ์ ์ฝ ์กฐ๊ฑด ๊ตฌ๋ฌธ
column [CONSTRAINT constraint_name] constraint_type,
ํ ์ด๋ธ ๋ ๋ฒจ ์ ์ฝ ์กฐ๊ฑด ๊ตฌ๋ฌธ
column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),
-> ํ ์ด๋ธ ๋ ๋ฒจ ์ ์ฝ์กฐ๊ฑด ์ฌ์ฉ์ ๊ถ์ฅํ๋ค.
์ ์ฝ ์กฐ๊ฑด ์ ํ 1.NOT NULL 2. UNIQUE 3. PRIMARY KEY 4. FORIEGN KEY 5. CHECK
์์๋ฅผ ๋ณด์
CREATE TABLE ์ฌ์(
์ฌ๋ฒ VARCHAR2(10) CONSTRAINT ์ฌ์_์ฌ๋ฒ_pk PRIMARY KEY,
์ด๋ฆ VARCHAR2(20) NOT NULL,
์ง๋ฌด ID VARCHAR2(6),
์ฃผ๋ฏผ๋ฒํธ CHAR(13),
๊ธ์ฌ NUMBER(7),
CONSTRAINT ์ฌ์_์ง๋ฌดID_fk FOREIGN KEY (์ง๋ฌดID) REFERENCES ์ง๋ฌด(์ง๋ฌดID),
CONSTRAINT ์ฌ์_์ฃผ๋ฏผ๋ฒํธ_uq UNIQUE (์ฃผ๋ฏผ๋ฒํธ),
CONSTRAINT ์ฌ์_๊ธ์ฌ_ck CHECK (๊ธ์ฌ >=0)
);
INSERT INTO ์ง๋ฌด(์ง๋ฌดID, ์ง๋ฌด๋ช
) VALUES ('A', '์ธ์ฌ์
๋ฌด');
INSERT INTO ์ฌ์(์ฌ๋ฒ, ์ด๋ฆ, ์ง๋ฌดID, ๊ธ์ฌ) VALUES ('s1','n1','A', 1000);
DELETE FROM ์ง๋ฌด WHERE ์ง๋ฌดID = 'A'; -- ERROR
๋ถ๋ชจ ํ ์ด๋ธ์์ ์ฐธ์กฐ๋๊ณ ์๋ ์์ํ ์ด๋ธ์ด ์์๋ ์๋ฌ ๋ฐ์
์ฌ์ ํ ์ด๋ธ ์์ฑ์
~, CONSTRAINT ์ฌ์_์ง๋ฌดID_fk FOREIGN KEY (์ง๋ฌดID) REFERENCES ์ง๋ฌด(์ง๋ฌดID) ON DELETE CASCADE
์์ ํ ์ด๋ธ์ ์์ฑํ ๋, ์ฐธ์กฐํ๋ ๋ถ๋ชจ ํ ์ด๋ธ์ ์ ๋ณด๊ฐ ์ญ์ ๋๋ฉด ๊ฐ์ด ์ญ์ ๋๊ฒ ๋ค๋ ์ ์ฝ์กฐ๊ฑด! ์ ๋ฌด์์ ์ ์ฌ์ฉํ์ง ์๋๋ค.