DDL (Data Definition Language) | DML (Data Manipulation Language) | DCL (Data Control Language) | TCL (Transaction Control Language) |
---|---|---|---|
CREATE ALTER DROP TRUNCATE RENAME | SELECT INSERT UPDATE DELETE | GRANT REVOKE | COMMIT ROLLBACK |
비절차적 데이터 조작어 : 사용자가 무슨(What) 데이터를 원하는 지만을 명세하고, 어떻게 그 결과를 얻을지에 대한 구체적인 단계를 명시하지 않음
절차적 데이터 조작어 : 어떻게(How) 데이터를 접근해야 하는지 명세함
테이블을 생성할때 제약조건을 넣을때는 다음과 같이 작성한다.
CREATE TABLE PRODUCT
(PROD_ID VARCHAR2(10) NOT NULL,
PROD_NM VARCHAR2(100) NOT NULL,
ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_PK PRIMARY KEY (PROD_ID));
또는
CREATE TABLE PRODUCT
(PROD_ID VARCHAR2(10) NOT NULL,
PROD_NM VARCHAR2(100) NOT NULL,
CONSTRAINT PRODUCT_PK PRIMARY KEY (PROD_ID));
ALTER TABLE 테이블이름 ALTER COLUMN 컬럼명 속성;
: ALTER TABLE은 스키마(테이블 구조)를 변경하는데 사용되며, 각각의 컬럼에 대해 개별적으로 수행됩니다.
UPDATE 테이블이름 SET column1=value1, column2=value2;
: UPDATE는 레코드의 값을 수정하는데 사용되며, 한 번에 여러 개의 컬럼을 수정할 수 있습니다.
💡 SQL Server 에서는 괄호를 사용하지 않는다.
ON DELETE CASCADE
: CASCADE은 종속이란 뜻으로, 원본데이터를 삭제하면 종속데이터(FK)까지 전부 삭제됨
ON DELETE SET NULL : 원본데이터를 삭제하면 종속데이터(FK)는 NULL값으로 대체됨
① UNIQUE : 중복 불가, NULL 입력은 가능 !!!
② 한 테이블에 PK 는 1개만 생성 가능하다.
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, PROD_NM));
다음과 같이 다중 컬럼을 하나의 PK로 지정하는 건 가능하나, PK가 여러개인 건 불가능 !!!
외래키(FK)는 NULL 값을 가질 수 있고, 여러 개 존재할 수 있다.
원하는 컬럼을 삭제하고 싶을 때, ALTER TABLE 테이블이름 DROP COLUMN 컬럼이름;
컬럼의 내용만을 삭제하고 싶을 때, DELETE FROM 테이블이름 WHERE 조건;
child table의 FK 데이터 생성시 parent table에 PK가 없는 경우, 데이터 입력하는 데 제약을 주는 조건들
③ DELETE FROM 주문 WHERE 주문번호 IN ('0001', '0002'); 를 실행하면 FK 는 NULL 값이 가능하므로 오류없이 정상적으로 실행된다.
DELETE : 삭제 데이터에 대한 로그를 남긴다.
⇕
TRUNCATE, DROP : 로그를 남기지 않는다.
DELETE * FROM 테이블이름;
-> 문법에 맞지 않음
DELETE / TRUNCATE / DROP
차이DELETE | TRUNCATE | DROP |
---|---|---|
저장된 공간 반납 O | 저장된 공간 반납 X | 저장된 공간 반납 X |
Rollback 가능 | Rollback 불가 | Rollback 불가 |
DML ➭ 사용자 Commit | DDL ➭ Auto Commit | DDL ➭ Auto Commit |
데이터베이스 트랜잭션 4가지 특성
원자성
: 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 OR 전혀 실행되지 않은 상태로 남아 있어야 한다. (All or Nothing)
일관성
: 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면, 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
고립성
: 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
지속성
: 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
데이터베이스 트랜잭션에 대한 격리성이 낮은 경우의 문제점
① Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것
② Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했을 때, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상을 말한다.
③ Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했을 때, 첫번 째 쿼리에서 없던 유령레코드가 다르게 나타나는 현상을 말한다.
④ isolation : 데이터베이스 트랜잭션 4가지 특성 중 하나로 문제점이라기보다 목표라고 할 수 있다.
ORACLE
: DDL 문장 수행 후 자동으로 COMMIT을 수행한다.
SQL Server
: DDL 문장 수행 후 자동으로 COMMIT을 수행하지 않는다.
(AUTOCOMMIT = TRUE/FALSE 로 옵션 제공)