SQL 문장 종류
DML(데이터 조작어)
- 종류 : SELECT, INSERT, UPDATE, DELETE
- 오라클 : 수동 커밋, SQL Server : 자동 커밋
- 비절차적 데이터 조작어로 사용자가 무슨 데이터를 원하는지만 명세한다.
💡절차적 데이터 조작어는 어떻게 데이터에 접근해야 되는지까지 명세
DDL(데이터 정의어)
- 종류 : CREATE, ALTER, DROP, RENAME
- 오라클 : 자동 커밋, SQL Server : 수동 커밋
DCL(데이터 제어어)
TCL(트랜젝션 제어어)
컬럼에 제약조건 추가하기
ALTER TABLE 테이블명 ADD CONSTRAINT 컬럼명 제약조건;
💡 SQL Server는 여러 개의 컬럼을 동시에 수정하는 구문을 지원하지 않고, 괄호를 사용하지 않는다.
테이블/컬럼 이름 변경
테이블
RENAME 변경전 테이블명 TO 변경할 테이블명;
컬럼
ALTER TABLE 테이블명 RENAME COLUMN 변경전 컬럼명 TO 변경할 컬럼명;
참조동작(Referential Action)
Delete(/Modify) Action : Cascade, Set Null, Set Default, Restrict (부서-사원)
- Cascade : Master 삭제 시 Child 같이 삭제
- Set Null : Master 삭제 시 Child 해당 필드 Null
- Set Default : Master 삭제 시 Child 해당 필드 Default 값으로 설정
- Restriat : Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용
- No Action : 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음
Insert Action : Automatic, Set Null, Set Defaulit, Dependent (부서-사원)
- Automatic : Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Child 입력
- Set Null : Master 테이블에 PK가 없는 경우 Child 외부키를 Null 값으로 처리
- Set Default : Master 테이블에 PK가 없는 경우 Child 외부키를 지정된 기본값으로 입력
- Dependent : Master 테이블에 PK가 존재할 때만 Child 입력 허용
- No Action : 참조무결성을 위반하는 입력 액션을 취하지 않음
DROP, TRUNCATE, DELETE
DROP | TRUNCATE | DELETE |
---|
DDL | DDL (일부 DML 성격을 가짐) | DML |
ROLLBACK 불가 | ROLLBACK 불가 | COMMIT 이전 ROLLBACK 가능 |
AUTO COMMIT | AUTO COMMIT | 수동 COMMIT |
테이블이 사용했던 Storage 모두 Release | 테이블이 사용했던 Storage 중 최초 테이블 생성 시 할당된 Storage만 남기고 Release | 데이터를 모두 Delete해도 사용했던 Storage는 Release되지 않음 |
테이블의 정의 자체를 완전 삭제 | 테이블을 최초 생성된 초기상태로 만듬 | 데이터만 삭제 |
로그 X | 로그 X | 로그 O |
트랜잭션의 격리성
실행 중인 트랜잭션의 중간 결과를 다른 트랜잭션이 접근할 수 없도록 격리레벨에 따라 관리한다.
격리성으로 나타낼 수 있는 문제점
- Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋 되지 않은 데이터를 읽는 것
- Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타는 현상
- Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타는 현상
💡Non-Repeatable Read는 1개의 ROW를 수행, Phantom Read는 다건 요청이 들어왔을 때 발생