일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Vector
- abstractclass
- concreteclass
- constantnumber
- 객체형변환
- super
- arguments
- ALTER
- Polymorphism
- 생성자
- Eureka
- string
- eclipse
- Hashtable
- 추상클래스
- start()
- hamobee
- run()
- 콘크리트클래스
- class
- garbagecollection
- override
- value
- fuction
- reference
- methodArea
- MSA
- object
- hashCode
- overload
- Today
- Total
뇌운동일지
[Oracle] 데이터 갱신과 트랜잭션 제어 본문
SQL 구조질의문
DQL : select
DML : insert, delete, update
DDL(정의) : create, alter
TCL (Transaction Control Language) : commit, rollback
SQL + 제어구조 => PL/SQL (오라클에서만 나옴)
공통 SQL : ANSI-SQL ( 거의 모든 데이터베이스에서 실행되는 SQL )
insert
insert into 테이블명
(컬1, 컬2, 컬3 ...) values (v1, v2, v3 ...)
컬럼명이 있으면, 명기된 컬럼 순서
컬럼명이 생략되면, 테이블 구조순서
where 조건절 ;
data가 입력되지 않으면, null값이 채워짐
-> null을 허용하는 경우
insert select 문
update
update 테이블명 set
컬1 = 값1, 컬2 = 값2 ,,,
where 조건절 ;
<---> 잘못된 수정/입력/삭제를 복구 => Transaction ( DML일 때 필요 )
commit 하지 않으면 DB에는 적용되지 않고 session에만 살아있다가 꺼짐.
commit 하면 이전의 내용까지 commit되고, 다음부터 transaction 시작
잘못되었을 경우 rollback해서 transaction 복구
컬럼명 = 컬럼명 + 값
=> 기존값에 연산해서 새로운 값을 더해서 수정해라
subquery를 이용한 수정문
subquery의 결과가
다중 행일때는 in 사용
하나 일때는 = 사용
create table a_enrol
as select *
from enrol
where stu_no < 20150000;
update a_enrol
set enr_grade = enr_grade +10
where sub_no = (select sub_no
from subject
where sub_name='시스템분석설계');
delete
delete from 테이블명
where 조건절 ;
-> 데이터 삭제
drop table 테이블명 ;
-> 테이블 삭제, 트랜잭션의 영향을 받지 않음, auto commit
merge
create table a_student
as select *
from student
where 1 = 0 ;
merge into a_student a
using student s
on (s.stu_no = a.stu_no)
when matched then
update set a.stu_weight = s.stu_weight
when not matched then
insert values(s.stu_no, s.stu_name, s.stu_dept, null, null, null, null, s.stu_weight) ;
TCL
특징 : all or nothing
insert | rollback update | delete | ------------------------------ commit | 완료되면서 새로운 트랜잭션이 시작된다 |
transaction -- 신뢰성
무결성 : 입력되는 데이터는 결점을 가지면 안됨
문제가 하나도 없으면 완료하고,
하나라도 문제가 있으면 처음으로 돌아간다.
( 금융거래 시, 반드시 들어감 )
commit 되면 돌아갈 수 없음
예시 )
delete create ( auto commit 되는 문장 ) |
create table A
as select * from B
where 1 = 0 ; // data없이 테이블 구조만 복제하는 경우
select문은 lock의 영향을 받지 않음. // select문 자체가 lock일 발생시키지는 않는다
commit 되지 않았으면 lock이 걸린 상태
상호간에 lock을 걸면 -> deadlock ( 상호교착 )
oracle에서는 deadlock을 스스로 해제
'DB > Oracle' 카테고리의 다른 글
[Oracle] 데이터 정의어 (DDL; Data Definition Language) (0) | 2020.05.28 |
---|---|
[Oracle] 데이터 갱신과 트랜잭션 제어 연습문제 (0) | 2020.05.28 |
[Oracle] join과 subquery 연습문제 (0) | 2020.05.27 |
[Oracle] SubQuery, 집합연산자 (0) | 2020.05.27 |
[Oracle] join (0) | 2020.05.26 |