▶데이터 언어 : 데이터베이스를 정의하고 접근하기 위해서 데이터베이스 관리 시스템과의 통신수단.
데이터 조작어(DML) | SELECT | 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE라고도 한다. | |
INSERT UPDATE DELETE |
데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블에 새로운 행을 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어들을 DML이라 부른다. | INSERT INTO VALUES UPDATE SET DELETE |
|
데이터 정의어(DDL) | CREATE ALTER DROP RENAME |
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라 한다. | ALTER TABLE ADD MODIFY DROP COLUMN DROP COLUMN |
데이터 제어어(DCL) | GRANT REVOKE |
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어 | |
트랜젝션 제어어(TCL) | COMMIT ROLLBACK |
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어. |
Delete Action
- Restrict : Master 삭제 시 child 같이 삭제
- Cascade : Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용
Insert Action
- Automatic : Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Child 입력
- Dependent : Master 테이블에 PK가 존재할 때만 Child 입력 허용
▶
As-Is : 비절차적 데이터 조작어(DML)는 사용자가 무슨(What)데이터를 원하는 지만을 명세함.
To-Be: 절차적 데이터 조작어는 무슨(What) 데이터를 어떻게(How) 접근해야 하는지까지도 명세 한다.
절차적 데이터 조작어로는 PL/SQL(오라클), T-SQL(SQL Server)등이 있다.
▶
<< ORACLE >>
CREATE 생성
CREATE TABLE PRODUCT
( PROD_ID VARCHAR2(10) NOT NULL
,PROD_NM VARCHAR2(100) NOT NULL
,REG_DT DATE NOT NULL
,REGR_NO NUMBER(10)
,CONSTRAINT PRODUCT_PK PRIMARY KEY (PROD_ID) );
제약조건 이름
ALTER TABLE 이용
CREATE TABLE PRODUCT
( ''
,ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_PK PRIMARY KEY(PROD_ID);
ALTER TABLE emp MODIFY editid VARCHAR2(5) DEFAULT '1000';
칼럼지우기
ALTER TABLE EMP DROP COLUMN SAL;
테이블 이름변경
RENAME STADIUM TO STADIUM_JSC;
Key
키 (Key) 의 개념
하나의 테이블 내에서 각 튜플의 유일하게 식별할 수 있는 속성 (Attribute) 들의 집합
실생활의 키
하나의 자물쇠를 열수 있는 열쇠 ( 키 ) 는 오직 하나임
생활의 편리성을 위하여 키를 복제하여 쓰지만 논리적으로는 하나임
수퍼키 (Super Key)
유일성을 만족하는 속성 집합
최소성을 만족하지 않아도 됨
일반적으로 후보키는 수퍼키의 부분 집합임 ⇔ 수퍼키는 후보키를 포함함
수퍼키 : 이름, 학과 , 전화번호 (유일성이 보장이되어야함)
후보키 (Candidate Key)
한 릴레이션 R(A1, …, An)에 대한 속성의 집합 K={Ai,…, Aj} 으로
다음과 같은 성질을 만족함
유일성 (Uniqueness) : 서로 다른 두 튜플의 속성집합 K 의 값은 같지 않음 (튜플의 유일성을 유지시키는 최소 속성 집합)
최소성 (Minimality) : K 는 서로 다른 두 튜플을 식별하기 위한 최소한의 속성들로만 이루어져 있음
릴레이션의 특징 : 튜플의 유일성
예) 학번, 주민등록번호
[!] 전화번호는 바꿀 수 있기 때문에 후보키가 될 수 없음 (후보키는 바꿀 수 없는 것)
기본키 (Primary Key)
하나의 릴레이션에는 후보키가 여러 개 있을 수 있음
여러 개의 후보키 중 DBA 가 지정한 하나의 키임
대체키 (Alternative Key)
후보키 중 기본키를 제외한 나머지 후보키
외래키 (Foreign Key)
한 릴레이션 R1 의 튜플과 다른 릴레이션 R2 의 하나의 튜플과의 연관 관계를 표시하기 위하여 사용함
R1 의 속성집합 FK 의 도메인이 R2 의 기본키 일 때 , FK 를 R1 의 외래키라 함
R1 을 참조 릴레이션 , R2 를 피참조 릴레이션이라고 함
R1 과 R2 가 다른 릴레이션일 필요는 없음
예) 다른테이블에서는 기본키인데 내쪽으로 넘어오니까 아무것도 아니더라 : 외래키
a테이블에선 기본키인데 b테이블에선 아닌것이 외래키
내가 탈퇴를 했을때 내 글이 삭제가 되게끔하겠느냐/글은 남아있게 하겠느냐 : 외래키
외래키 설정을 했다면 나에 대한 정보가 탈퇴와 동시에 모두 사라짐
[!]외래키는 필수가 아님
개체 무결성
의미 : 서로 다른 두 튜플은 같을 수 없음
정의 : 기본키 값은 언제고 어느 때고 NULL 값일 수 없음
참조 무결성
외래키 값은 피참조 릴레이션의 기본키 값이거나 NULL 값임
추가 지정을 통해 NULL 을 가질 수 없다고 제약을 걸 수 있음

도메인 무결성
속성 (Attribute) 값은 해당 속성 (Attribute) 도메인에 속한 값들 중 하나이어야 함
예 ) 대학생의 학년 도메인 : 1, 2, 3, 4
- 9 학년 또는 10 학년은 존재할 수 없음
DBMS 는 데이터베이스의 상태 변화 ( 삽입 , 갱신 , 삭제 ) 에도 항상 무결성 제약조건을 검사하고 유지시킴
출처: https://reeme.tistory.com/21 [작업실:티스토리]
<<SQLServer>>
ALTER : SQL에서는 여러개의 컬럼을 동시에 수정하지 못함.
ALTER TABLE 기관분류 ALTER COLUMN 분류명 VARCHAR(30) NOT NULL;
ALTER TABLE 기관분류 ALTER COLUMN 등록일자 DATE NOT NULL;
▶ 제약조건의 종류
- PRIMARY KEY(기본키) : UNIQUE & NOT NULL
-UNIQUE KEY(고유키) : NULL 가능
-NOT NULL
-CHECK : 데이터의 무결성을 유지하기 위해 테이블의 특정 컬럼에 설정하는 제약
ALTER TABLE emp ADD CONSTRAINT emp_check CHECK(salary >= 1000 AND salary <= 10000)
-FOREIGN KEY
▶ 테이블 생성시 주의사항
- 테이블 명은 객체를 의미할 수 있는 이름. 가능한 단수형
- 중복X
- 한 테이블 내 칼럼명 중복 X
- (데이터 표준화 관점) 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용
- 생성시 데이터 유형 반드시 지정
- 테이블과 칼럼명은 반드시 문자로 시작, 벤더별로 길이에 한계가 있음
- 벤더에서 사전에 정의한 예약어는 쓸 수 없다
- A-Z, a-z, 0-9, _, $ ,# 가능
▶외래키
외래키 값은 참조 무결성 제약을 받을 수 있다.
- 기본 키와 참조 키 간의 관계가 항상 유지됨을 보장합니다.
- 참조되는 테이블의 행을 이를 참조하는 참조키가 존재하는 한 삭제될 수 없고, 기본키도 변경될 수 없습니다.
출처: https://jwprogramming.tistory.com/53 [개발자를 꿈꾸는 프로그래머:티스토리]
*Delete(/Modify) Action (부서 - 사원)
1) Cascade : Master 삭제 시 Child 같이 삭제
2) Set Null : 해당 필드 Null
3) Set Default : 해당 필드 Default 값으로 설정
4) Restrict : Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용
5) No Action :참조무결성을 위반하는 삭제/수정 액션을 취하지 않음.
*Insert Action (부서 - 사원)
Automatic : Master 테이블에 PK가 없는 경우 Master PK 생성 후 Child 입력
Set Null : Child 외부키를 Null 값으로 처리
Set Default : Child 외부키를 지정된 기본값으로 입력
Dependent : Master 테이블에 PK가 존재할 때만 Child 입력 허용
No Action : 참조무결성을 위반하는 입력 액션을 취하지 않음.
▶ 데이터 삭제
DELETE FROM ___ : 삭제 데이터에 대한 로그를 남김. 데이터만 삭제
TRUNCATE TABLE ___ : 특정 테이블의 모든 데이터를 삭제하고 ,디스크 사용량을 초기화
DROP TABLE ___ : 테이블의 스키마 정의도 함께 삭제된다.
DELETE | TRUNCATE | DROP |
DML | DDL(일부 DML) | DDL |
Commit 이전 Rollback 가능 | Rollback 불가능 | Rollback 불가능 |
사용자 Commit | Auto Commit | Auto Commit |
모두 Delete해도 사용했던 Storage는 Release 되지 않음 |
최초 테이블 생성시 할당된 Storage만 남기고 Release |
사용했던 Strage 모두 Release |
데이터만 삭제 | 테이블을 최초 생성된 초기 상태로 만듦 | 테이블의 정의 자체를 완전히 삭제함. |
▶ 데이터 조회
SELECT [ALL / DISTINCT] 칼럼
-ALL : 중복된 데이터 모두 표시. 생략가능
-DISTINCT : 중복제거
▶트랜잭션
- 원자성 : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않음
- 일관성 : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터 베이스의 내용에 잘못이 있으면 안된다.
- 고립성 : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
- 지속성: 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
트랜잭션에 대한 격리성이 낮은 경우>>
Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽음.
Non-Repeatable Read: 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데,
그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타남
Phanton Read: 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데,
첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상
▶
트랜잭션 :
데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킴.
커밋(Commit):
트랜잭션의 종료를 위한 대표적 명령어로서 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영
Oracle은 자동으로 커밋함
롤백(Rollback):
데이터에 대한 변경사항을 모두 폐기하고 변경전의 상태로 되돌림.
관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다.
Oracle
ddl dml dcl tcl이 있는데
ddl과 dcl은 auto commit이여서 따로 commit을 지정하지 않아도 자동으로 커밋되는데
dml은 auto commit이 아니여서 따로 commit을 지정해야 해여
commit된 정보들은 rollback을 못해여
SqlServer
어떠한 명령어를 통해서 작업을 할때 이 작업 단위를 지정해서 BEGIN TRAN이란 명령을 사용한 다음에 ROLLBACK을 수행하면 BEGIN TRAN지점으로 돌아가는거에여
'공부 > SQLD' 카테고리의 다른 글
SQL기본 및 활용 (0) | 2022.08.25 |
---|---|
데이터 모델링의 이해 (0) | 2022.08.24 |
데이터 모델링 (0) | 2022.08.22 |