+ Hello +

0510 DB (1) 데이터 조작 insert, update, delete 본문

+ 스마트인재개발원 +/# DB

0510 DB (1) 데이터 조작 insert, update, delete

journeyee 2021. 5. 30. 22:22

 

8. 데이터 조작

p317


* DML : 전체의 트랙젝션
- DDL,DCL : 문장 하나가 하나의 트랜젝션, 실행과 동시에 auto commit(바로 저장되어버림)

트랜젝션
- 일괄처리
- 저장(커밋, ,commit : DB 영구히 저장), 취소(롤백 roll back : 현재 진행중인 트랜젝션들의 전체 취소)


1. insert(삽입) : 행 단위 작업


테이블 맨 마지막!!에 새 행을 추가함
테이블은 행의 순서를 제어하지 않음

* index
non_cluster : 별도의 공간에 저장되는 index
cluster : table과 index의 구조를 합쳐둔 것 (table자체가 행의 순서를 정렬, 이 경우 외에는 순서를 제어하지 x)

 

- insert 구문 : 한 번에 한 행만!! 추가됨
insert into + table_name
values

 



insert into + (삽입할)table_name
1. table_name만 명시 insert test
- table에 있는 모든 column의 데이터를 삽입

2. colmn 같이 명시 insert test(a,b,c)
values + 값
1. into 절에 명시된 column의 순서, 개수, data type, 길이와 values절의 값을 반드시 1:1로 매칭해야한다!
ex) insert into dept(did, dname, mid, lid)
     vlaues( 100, 'aa, 200, 1700)
        ()의 순서가 1:1로 매칭되어야 함

- insert into departments
  values(200, 'ITCENTER', 100, 1700);
> 에러 뜸 200번이 이미 존재하기 때문에 
   즉, 무결성

* insert 무결성 검증
- 1) column 무결성 : 구조(data type, 길이) 즉 구조에 맞는 data만 삽입되어야 한다
ex) dname 문자 5자리 > aaaaaa(6자리) 삽입 안됨!

- 2) 제약조건 무결성 : PK(중복x), FK(다른 table 값 참고) 의 무결성 보장
제약조건에 위배가 되는 data 삽입 방지

 


* null값에 입력하는 방법(2가지)


1)  insert into departments(department_id, department_name) // 원래 4개인데 입력하고 싶은 column 이름만 작성!
    values(300, 'ITCENTER');
 >> into 절에 column이름을 빼는 방법(자동삽입, 암시적 방법)


2) insert into departments
   values(310, 'ADMIN', null, null);
 >> values에 null 직접 입력해주는 방법(수동삽입, 명시적 삽입방법)

-------------------------------------------------------------------------------
- sysdate 함수 : 현재 날짜 및  시간을 기록
select sysdate from dual;
- dual table 비어있어서 
select 123*15936 from dual > 값이 나옴

 


2. update : 열col 단위 작업

update 예시 1
update 예시 1


- update 구문 :
update table_name
set (변경시킬)column_name = value;
where 선택사항


3.  delete : 행 단위 삭제 (334p)


- 구문 : 
delete from table;
(where 선택사항)

- delete from departments;


  1. 동시성 : 동시에 수많은 사람들이 database를 다를 수 있음
  2. 읽기 일관성 :  데이터를 t1이 변경하고 중간에  commit 되지 않으면 t2가 변경하고 commit했을 때 t1은 반영x
  3. database 대기상태(lock)
      : 병행제어(동시에 여러개의 트랜젝션이 실행됐을 때 다른 트랜젝션이 내 트랜젝셩에 적용하기 못하게 만드는 것 즉 lock)


T1(lock)
 update employees
    set salary = 20000
where employee_id = 141;

T2
 update employees
   set salary = 30000
   where employee_id = 141; 실행 xx (T1이 진행중인 것으로 나오기때문에)>병행제어(lock) 즉 대기상태, 멈춰버림

T1 commit저장하면(혹은 rollback으로 ing 끝나면) T2 실행됨

- 서로가 서로의 트랜젝션에 접근하면 deadlock 상태 됨(즉 둘다 대기상태일 때)

T1 T2
id = 141 id = 142
id = 142 (대기) id = 141 (대기)

>> deadlock상태



'+ 스마트인재개발원 + > # DB' 카테고리의 다른 글

0510 DB (3) 3 예제 풀이  (0) 2021.05.30
0510 DB(2) 제약조건, 테이블 생성  (0) 2021.05.30
0507 DB 조인  (0) 2021.05.30
Comments