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;