2. DML, TCL

Gwonyeong·2023년 1월 24일
0

MySQL

목록 보기
2/3

select (read)

  • like/ in / between

  • distinct/ count(distinct col1)

  • order by/ rand()

    • order by rand() DESC : 랜덤한 순서로 출력
  • limit a/ limit a, b(a부터 시작해서 b개만큼)

  • group by, having

    • having 은 group by에 조건을 거는 것
    • group by는 select가 실행된 이후에 실행된다.
  • case when ~ else ~ end

    •   select (case when pid = 0
            then '최상위 부서'
            else '부서'
            end)
            as ppid
            from Dept;
      
    • pid 가 0인경우 '최상위 부서'라고 출력, 그게 아니라면 '부서' 출력

  • on duplicate key update ...

    •   insert into Dept(pid, dname) values(2, '서버팀')
      on duplicate key update dname='서버팀2';
    • '서버팀'으로 insert를 시도해보고 실패하면 서버팀2로 이름을 변경해라.

Foreign-key

  • 항상 기준 테이블(참조 당하는) 테이블을 먼저 생성할 것.
  • set null
    • 회사 직원의 DB에서 부서가 없어질 경우 해당 부서의 소속이였던 사원까지 같이 없어지면 될까?
    • 이런 경우를 위해 연결된 row가 사라지면 null로 값을 변경하는 기능.
    • 당연히 not null과 함께 사용할 수 없음.
  • cascade
    • 같이 삭제

Join

  • inner join
    •   select s.* , p.name as 'prof. name'
            from Subjects s
            inner join Prof p
            on s.prof = p.id
    • Subjects라는 테이블을 s로 사용하고 Prof라는 테이블을 p로 사용하는데
    • s.prof와 p.id가 같은 row끼리 합치는 것.

outer join

  • 기준이 되는, 보고자 하는, 테이블 쪽으로
  • [left | right | full] outer join ... on ...
  •   select d1.dname as '상위부서', d2.*
    from Dept d1 left join Dept d2 on d1.id = d2.pid;
    이 쿼리는 Dept를 모두 출력함.
    • 쉽게 생각해 left join은 왼쪽 테이블의 모든 값 출력
    • right join은 오른쪽 테이블의 모든 값 출력

cross join

  • select * from Dept, Emp;
  • 잘 안쓰임.

Transaction

TCL : Commit & Rollback

  • 트랜젝션은 거래라는 뜻.
  • 데이터베이스 내에서 하나의 그룹으로 처리되어야 하는 명령문을 모은 작업 단위
  • 하나의 명령어라도 잘못되면 전체 취소
  • 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위함.
  • Table Create 등의 DDL에 대해서는 Rollback 적용 안됨.

Commit

  • 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어
  • 처리과정을 DB에 영구 저장
  • Commit을 수행하면 하나의 트랜잭션 과정을 종료하는 것.

Roolback

  • 작업 중 문제가 발생되면 트랜잭션의 처리과정에서 발생한 변경사항을 취소하는 명령어
  • 트랜잭션이 시작되기 전 상태로 되돌림.
  • 즉, 마지막 Commit을 한 시점으로 돌아감.

Savepoint

  • 임시 저장
  • 트랜잭션을 작게 분할하는 개념.
  • Rollback To {SAVEPOINT-NAME};
    • 해당 세이브포인트까지 처리한 작업이 Rollback됨.
start transaction;
# 트랜잭션 시작, 작업중 에러가 생기면 이 곳 으로 돌아옴.

select * from Dept where id in (1,2);
savepoint sp1;
# 세이브포인트.

update Dept set dname='영업부서' where id = 1;
commit;
# 현재까지의 트랜잭션을 DB에 저장!

rollback;
rollback to sp1;
# sp1 세이브포인트로 롤백시킴
profile
부동의 첫사랑

0개의 댓글