RUBY
SQL개발자 - 제 1장. SQL 기본 본문
1. SQL 문장들의 종류
명령어의 종류 | 명령어 | 설명 |
데이터 조작어 (DML) |
SELECT | 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 한다. |
INSERT UPDATE DELETE |
데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블에 새로운 행을 집어 넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어들을 DML이라고 부른다. | |
데이터 정의어 (DDL) |
CREATE ALTER DROP RENAME |
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라고 부른다. |
데이터 제어어 (DCL) |
GRANT REVOKE |
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다. |
트랜잭션 제어어 (TCL) |
COMMIT ROLLBACK |
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말한다. |
2. 테이블 칼럼에 대한 정의 변경
- Oracle
ALTER TABLE 테이블명 MODIFY (칼럼명1 데이터 유형 [DERAULT 식][NOT NULL], 칼럼명2 데이터유형···); - SQL Server
ALTER TABEL 테이블명 ALRER (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명 2 데이터유형···);
3. 제약조건의 종류
1) PRIMARY KEY(기본키)
UNUQUE & NOT NULL
2) UNIQUE KEY(고유키)
테이블 내에서 중복되는 값이 없지만, NULL입력이 가능하다.
3) NOT NULL
명시적으로 NULL입력을 방지한다.
4) CHECK
입력범위를 직접 지정해주는 것
5) FOREIGN KEY(외래키)
외래키로 테이블당 여러 개 생성이 가능하다.
4. 테이블 생성의 주의사항
1) 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.
2) 테이블명은 다른 테이블의 이름과 중복되지 않아야 한다.
3) 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.
4) 테이블 이름을 지정하고 각 칼럼들은 괄호 "()"로 묶어 지정한다.
5) 각 칼럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다.
6) 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다.(데이터 표준화 관점)
7) 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
8) 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.
9) 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.
10) A-Z, a-z, 0-9, _, $, # 문자만 허용된다.
5. 외래키
1) 테이블 생성시 설정할 수 있다.
2) 외래키 값은 널 값을 가질 수 있다.
3) 한 테이블에 여러 개 존재할 수 있다.
4) 외래키 값은 참조 무결성 제약을 받을 수 있다.
6. 데이터베이스 테이블의 제약조건(Constraint)
1) Check 제약조건(Constraint)은 데이터베이스에서 데이터의 무결성을 유지하기 위하여 테이블의 특정 칼럼(Column)에 설정하는 제약이다.
2) 기본키(Primary Key)는 반드시 테이블 당 하나의 제약만을 정의할 수 있다.
3) 고유키(Unique Key)로 지정된 모든 칼럼들은 Null 값을 가질 수 있다.
4) 외래키(Foreign key)는 테이블간의 관계를 정의하기 위해 기본키(Primary key)를 다른 테이블의 외래키가 참조하도록 생성한다.
7. 테이블의 불필요한 칼럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 삭제할 칼럼명;
8. 테이블명 변경
RENAME 옛테이블명 TO 새테이블명;
9. 테이블에 데이터를 입력하는 두 가지 유형
1) INSERT INTO 테이블명(COLUMN_LIST) VALUES (COLUMN_LIST에 넣을 VALUE_LIST);
2) INSERT INTO 테이블명 VALUES(전체 COLUMN에 넣을 VALUE_LIST);
10. 입력된 데이터의 수정
1) UPDATE 테이블명 SET 수정되어야 할 칼럼명 = 수정되기를 원하는 새로운 값
11. FK의 사용
- DELETE / MODIFIED Action : CASCADE, Set Null, Set Default, Restrict (부서-사원)
1) CASCADE : Master 삭제 시, Child도 같이 삭제
2) Set Null : Master 삭제 시, Child 필드 null
3) Set Default : Master 삭제 시, Child 필드 Default 값으로 설정
4) Restrict : Child 테이블에 PK가 없는 경우에만 Master 삭제 허용
5) No Action : 참조무결성 위반 시 삭제/수정 액션을 취하지 않음 - Insert Action : Automatic, Set Null, Set Default, Dependent (부서-사원)
1) Automatic : Master 테이블에 PK가 없는 경우, Master 테이블에 PK 생성 후 Child 입력
2) Set Null : Master 테이블에 PK가 없는 경우, Child의 외부키를 null 값으로 처리
3) Set Default : Master 테이블에 PK가 없는 경우, Child의 외부키를 지정된 기본값으로 입력
4) Dependent : Master 테이블에 PK가 존재할 때만 Child 입력 가능.
5) No Action : 참조무결성 위반하는 입력 액션을 취하지 않음
12. 테이블 삭제
DELETE FROM 테이블명;
13. 중복 제거
SELECT DISTINCT 거주지, 근무지 FROM 고객지역;
SELECT 거주지, 근무지 FROM 고객지역 GROUP BY 거주지, 근무지;
14. 테이블 삭제
1) TRUNCATE TABLE - 특정 테이블의 모든 데이터를 삭제하고, 디스크 사용량을 초기화
2) DELETE TABLE - 테이블의 모든 정보를 삭제하지만, 디스크 사용량을 초기화하지는 않는다.
3) DROP TABLE - 테이블의 데이터를 모두 삭제하고 디스크 사용량도 초기화 할 수 있지만, 테이블의 스키마정의도 같이 사라진다.
DROP | TRUNCATE | DELETE |
DDL | DDL (일부 DML 성격 가짐) |
DML |
Rollback 불가능 | Rollback 불가능 | Commit 이전 Rollback 가능 |
Auto Commit | Auto Commit | 사용자 Commit |
테이블이 사용했던 Storage를 모두 Release |
테이블이 사용했던 Storage중 최초 테이블 생성시 할당된 Storage만 남기고 Release | 데이터를 모두 Delete해도 사용했던 Storage는 Release되지 않음 |
테이블의 정의 자체를 완전히 삭제함 | 테이블을 최초 생성된 초기 상태로 만듬 | 데이터만 삭제 |
15. 트랜잭션의 속성
1) 원자성(atomicity)
트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.
2) 일관성(consistency)
트랜잭션이 실행 되기 전의 데이터베이스 내용이 잘 못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.
3) 고립성(isolation)
트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.
4) 지속성(durability)
트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
16. 데이터베이스 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점
1) Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것을 말함
2) Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행 했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상
3) Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상
17. 트랜잭션은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리키낟. 트랜잭션의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 커밋과 데이터에 대한 변경사항을 모두 폐기하고 변경전의 상태로 되돌리는 롤백이 있다.
'자격증 > SQL 개발자' 카테고리의 다른 글
SQL 문장들의 종류(DML, DDL, DCL, TCL) (0) | 2022.11.02 |
---|---|
[221025] SQL 문장들의 종류 (0) | 2022.10.25 |
SQL개발자 - 제 2장. 데이터 모델과 성능 (0) | 2022.09.03 |
SQL개발자 - 제 1장. 데이터 모델링의 이해 (1) | 2022.09.03 |
[220614] SQL개발자 _ 02. 반정규화 (0) | 2022.06.14 |