DDL은 데이터베이스 데이터를 보관하고 관리하기 위해 제공되는 여러 객체(object)의 생성/변경/삭제 관련 기능을 수행한다.
데이터를 추가, 변경, 삭제할 때 사용되는 명령어로 이루어져 있다.
관계형 데이터베이스에서 하나의 작업 또는 밀접하게 연관되어 있는 작업 수행을 위해 나눌 수 없는 최소 수행 단위
--DDL
--테이블 생성하기
CREATE TABLE new_table
(
name VARCHAR2(30), --한글이 한글자에 3Byte, 최대 10글자
score NUMBER(3) DEFAULT 0,
phone VARCHAR2(16) DEFAULT 'EMPTY',
address VARCHAR2(512)
);
SELECT *
FROM human_table;
--컬럼명 변경하기
ALTER TABLE new_table RENAME COLUMN phone TO mobile;
--테이블명 변경하기
RENAME new_table TO human_table;
--테이블을 복사한 후 테이블 생성하기
CREATE TABLE dept3
AS
SELECT * FROM dept2;
--데이터 없이 테이블의 구조(컬럼)만 복사해서 테이블 생성하기
CREATE TABLE dept4
AS
SELECT * FROM dept2
WHERE 1=2;
ALTER TABLE new_table
ADD (major VARCHAR2(128));
SELECT * FROM dept3;
--모든 데이터 삭제하기
TRUNCATE TABLE dept3;
--테이블 삭제하기
DROP TABLE dept3;
SELECT *
FROM USER_CONSTRAINTS;
SELECT *
FROM USER_INDEXES;
CREATE table new_emp
(
no NUMBER(5),
name VARCHAR2(20),
hiredate DATE,
bonus NUMBER(6,2)
);
SELECT * FROM new_emp;
CREATE table new_emp2
AS
SELECT no, name, hiredate FROM new_emp;
SELECT * FROM new_emp2;
CREATE table new_emp3
AS
SELECT no, name, hiredate FROM new_emp WHERE 1=2;
SELECT SYSDATE FROM dual;
ALTER TABLE new_emp2
ADD (birthday DATE DEFAULT SYSDATE);
--new_emp2 테이블의 birthday 컬럼 이름을 birth로 변경
ALTER TABLE new_emp2
RENAME COLUMN birthday TO birth;
--new_emp2 테이블의 no 컬럼의 길이를 NUMBER(7)로 변경
ALTER TABLE new_emp2
MODIFY (no NUMBER(7));
--new_emp2 테이블의 컬럼 중에서 birth 컬럼을 삭제
ALTER TABLE new_emp2
DROP COLUMN birth;
SELECT * FROM new_emp2;
--new_emp2 테이블의 컬럼은 남겨 놓고 데이터만 지우는 쿼리를 작성
TRUNCATE TABLE new_emp2;
--new_emp2 테이블을 완전히 삭제하는 쿼리를 작성
DROP TABLE new_emp2;
--DML
SELECT * FROM dept2;
--INSERT
INSERT INTO dept2 (dcode, dname, pdept, area)
VALUES ('9000', 'temp_1', '1006', 'temparea');
--전체 컬럼에 대한 데이터를 입력할 경우 컬럼명을 생락할 수 있다.
INSERT INTO dept2
VALUES ('9001', 'temp_2', '1006', 'Temp Area2');
INSERT INTO dept2
VALUES ('9002', 'temp_3', '1006', null);
INSERT INTO professor (profno, name, id, position, pay, hiredate)
VALUES (5001, 'James Bond', 'Love_me', '정교수', 510, '2014-10-23');
SELECT TO_CHAR(hiredate, 'YYYY-MM-DD HH24:MI:SS')
FROM professor
WHERE profno = 5001;
INSERT INTO professor (profno, name, id, position, pay, hiredate)
VALUES (5002, 'James Bond2', 'Love_me2', '정교수2', 510, SYSDATE);
SELECT *
FROM professor;
CREATE TABLE prof
AS
SELECT profno, name, id FROM professor
WHERE 1=2;
SELECT * FROM prof;
INSERT INTO prof VALUES (1, '교수1', 'PR1');
INSERT INTO prof
SELECT profno, name, id
FROM professor
WHERE profno IN (1001, 1002, 1003);
UPDATE prof
SET id = 'newid'
WHERE profno IN (1001, 1002);
UPDATE prof
SET id = 'where없이';
UPDATE prof
SET name = '새로운이름',
id = '새로운ID'
WHERE profno = 1002;
--DELETE할때 미리 사전에 확인한 후 삭제를 하는 것이 안전하다.
SELECT * FROM prof
--DELETE FROM prof
WHERE profno > 1;
--rollback, commit
INSERT INTO prof
SELECT profno, name, id
FROM professor;
commit;
SELECT * FROM prof;
rollback;
--profno = 1002 삭제를 하려다가 실수로 전체를 삭제한 경우
DELETE FROM prof --실수로 삭제
WHERE profno = 1001;
rollback; --되돌리기
SELECT * FROM prof
--DELETE FROM prof
WHERE profno IN (5001, 5002);
commit;
--제약조건
SELECT *
FROM USER_CONSTRAINTS
WHERE table_name = 'PROFESSOR';
--빨리 찾기 위해서 인덱스를 걸어둔다.
--따로 관리해서 속도를 줄이게끔 한다.
SELECT *
FROM USER_INDEXES
WHERE table_name = 'PROFESSOR';
--DBMS 이름
--ip 주소 = localhost : cmd -> ipconfig
--포트 확인 cmd -> lsnrctl status
--or D:\oracle\WINDOWS.X64_193000_db_home\network\admin\tnsnames.ora
--계정 scott
--비밀번호 tiger
SELECT *
FROM ALL_USERS;
--로그
--오라클 > diag > rdbms > orcl > orcl > trace
--D:\oracle\diag\rdbms\orcl\orcl\trace
--운영 시 오류, 문제, 경고 등을 확인한다.