SQL

오라클 데이터베이스 SQL (1) - DDL / DML / ROLLBACK, COMMIT

김랑해 2023. 7. 19. 18:36

1. DDL(테이블 수정)

-- 열의 데이터 형식 수정하기 
ALTER TABLE MEMBER MODIFY ID NVARCHAR2(50);

-- 열 삭제하기
ALTER TABLE MEMBER DROP COLUMN AGE;

-- 테이블 열 추가하기
ALTER TABLE MEMBER ADD EMAIL VARCHAR2(200);

 

근데 사실 테이블을 수정할 일이 그렇게 많지 않다

그래서 그냥 테이블 열고 핀 옆에 수정으로 현업에서는 한다고 한다

 

 

2. DML

CREATE TABLE NOTICE
(
ID NUMBER,
TITLE NVARCHAR2(100),
WRITER_ID NVARCHAR2(50),
CONTENT CLOB,
REGDATE TIMESTAMP,
HIT NUMBER,
FILES NVARCHAR2(1000)
);

--COMMENT 테이블엔 ""을 붙여줘야해 왜?
-- 실제 COMMENT가 예약어/부적합어(띄어쓰기)이기 때문임 오라클 기존 키워드랑 중복되어서
CREATE TABLE "COMMENT"
(
ID NUMBER,
CONTENT NVARCHAR2(2000),
REGDATE TIMESTAMP,
WRITER_ID NVARCHAR2(50),
NOTICE_ID NUMBER
);

CREATE TABLE ROLE
 (
    ID  VARCHAR2(50),
    DISCRIPTION   NVARCHAR2(500)
 );
 
 CREATE TABLE MEMBER_ROLE
 (
    MEMBER_ID   NVARCHAR2(50),
    ROLE_ID     VARCHAR2(50)
 );

 

INSERT, SELECT

INSERT INTO <테이블> VALUES <값목록> 의 형식을 가짐

코드는 대소문자를 가리지 않음

# 1 모든 값 다 삽입
INSERT INTO MEMBER VALUES ('newlec','111',홍길동','남성','1999-05-29', '010-2365-8956','newlec@newlectue.com','2014-05-21');
#2  원하는 값만
 INSERT INTO MEMBER(ID, PWD) VALUES('newlec', '111');
 SELECT*FROM MEMBER;

값을 넣지 않은 곳은 NULL이 들어감

 

<별칭>

SELECT id as user_id, name, pwd FROM MEMBER;

원래 기본 테이블에는 ID라는 열이 존재하는데 이번 SELECT에서 불러올 때는 열 이름에 user_id라는 별칭을 붙이겠다는 의미

 

오라클에서 빈 공백을 넣는 것은 유효하지 않은 것을 의미함

but 빈공백을 넣고싶다면? "user id"와 같이 따옴표 안에 넣어줄 것!

 

 

UPDATE / DELETE

-- 전체 다 업데이트
UPDATE MEMBER SET PWD = '333';

--특정 대상의 값만 변경
UPDATE MEMBER SET PWD ='333', name = '손오공' WHERE ID = 'dragon';

-- 특정 대상 값만 지우기
DELETE MEMBER WHERE ID = 'test';

 

 

 

3. COMMIT / ROLLBACK

트렌젝션 : 업무의 실행단위 / 논리 명령단위 / 개념상의 ...
업무적인 단위(실제 구현과 상관X) 물리적인 명령어 단위(실제 SQL상에서 구현)
계좌이체 A계좌 UPDATE + B계좌 UPDATE
이벤트 게시물 등록 INSERT + UPDATE

만약 계좌이체의 경우, 만약 A계좌에 입금을 UPDATE했는데 B계좌가 깡통계좌라면 문제가 생김 

이를 해결하기 위해서

 

1. 임시저장소에서 테스트가 필요함

2. 그동안 다른 세션에서 해당 데이터를 건들지 못하도록 (LOCK - UNLOCK)

3. 임시저장소에서 테스트 후 세션에 적용시키기 위해서 COMMIT, ROLLBACK 이용

 UPDATE MEMBER SET PWD ='333', name = '손오공' WHERE ID ='dragon';
 DELETE MEMBER WHERE ID='test';
 COMMIT;

 

 

https://youtu.be/FYgi70YLxkc

뉴렉처님의 유튜브 강의를 보고 따라하는 중입니다