본문 바로가기

카테고리 없음

BDA 학회 X 영진닷컴 SQLD 스터디 4주차

안녕하세요! 😊 오늘은 sqld 과제 4주차 관리구문에 해당하는 내용들을

정리,복습해보겠습니다 ! 


01. DML : Data Manipulation Language 

[INSERT] 

: 테이블에 새로운 데이터를 튜플(행) 단위로 입력함

 

insert 문법 

- INSERT INTO 테이블명 (COLUMN_LIST) VALUES (COLUMN_LIST에 입력할 값 리스트) ; 

-> 해석 : 어떤 컬럼에 어떤 값을 넣겠다

 

INSERT INTO TB_CUST(
	CUST_ID -- 회원 id
    ,CUST_NAME -- 회원명
    ,PASSWD -- 패스워드
    ,JOIN_DT -- 가입일시
    ,DEL_YN -- 탈퇴여부 
    ,MONEY -- 보유 금액 
    ,STOP_YN -- 정지여부
    ,ACT_POINT -- 활동점수
    ,ADDER -- 주소 
) VALUES (
	'HELLO'
    ,'김헬로
    ,'12345'
    SYSDATE
    ,'N'
    ,0
    ,'N'
    ,0
    '광주 동구 예술길 7번길 302'
 ); 
 -> 회원 ID 는 HELLO 
 -> 패스워드는 김헬로 뭐 이렇게 순서대로 매칭 되서 들어감

 

-> INSERT의 ERROR TYPE 

1.  식별자에 NULL을 입력한 경우  

-> primary key가 cust_ID이면 cust ID는 중복이 있으면 안되고 값이 필수로 있어야함 

 

2. not null 인 컬럼에 null을 넣은 경우 (DDL 파트)

 

3. 자료형에 맞지 않은 입력값을 넣은 경우 

-> DDL은 자료형 (문자, 숫자, 날짜)를 가짐

-> 예를 들어 입력받을 수 있는 자료형이 숫자형인데 문자형을 입력하면 에러가 난다는 말임 

-> invaild number 

 

4. 식별자 컬럼에 중복 값을 넣으려는 경우 

-> unique constraint ...  violated 이렇게 뜨는 경우 이쿼리를 한번 더 실행하면 오류가 발생함 

-> insert시 입력하지 않은 컬럼은 자동으로 default 값이 입력됨 (기본은 null)

-> 예를 들어, 생일을 필수 입력하게 했는데 null로 처리하려고 하면 안된다는 말이야 

-> 회원가입할떄 * 표시는 필수로 입력해야하는 값인데 깜빡하고 적지 못했던 일부로 적지 않았던 간에 

다음페이지로 넘어가려면 안넘어가 지듯이, not null 처리를 했는데 null로 처리하려고 하면 안된다는 뜻임 

 

5. 컬럼리스트와 입력 값의 개수가 다른 경우 

: 컬럼 개수 = 입력 값 개수가 일치해야 함 

만약 , 컬럼 리스트 개수 < 입력 값 개수 

: SQL 오류 : 값의 수가 너무 많습니다 

혹은 컬럼 리스트 개수 > 입력 값 개수 

: : SQL 오류 : 값의 수가 충분하지 않습니다 

 

-> 컬럼리스트 (column list)를 쓰지 않아도 insert 하는 방법이 있음 

 

[UPDATE]

: 테이블에 있는 기존의 데이터를 변경함 

 

update 문법 

update 테이블 set 바꿀컬럼 = 바꿀값 where 바꾸고 싶은 은행 조건 ; 

### 문법 
##update 테이블 set 바꿀컬럼 = 바꿀 값 where 바꾸고 싶은 행 조건 ; 
UPDATE TB_CUST 
 SET CUST_NAME = '이름변경'
 	, ACT_POINT = ACT_POINT + 200 
    , MONEY = 10000
WEHRE CUST_ID ='C0001';

 

(1) 변경할 컬럼과 값을 SET 뒤에 " =  " 로 입력하여 데이터를 수정함 

(2) 여러 컬럼의 값을 동시에 수정할 수 있음 

(3) WHERE 조건을 사용하지 않으면 ,테이블 내 모든 행이 변경되어버림 (주의 ! ) 

 

[DELETE] 

: 테이블에 존재하는 데이터를 튜플(행) 단위로 삭제함 

 

문법 

DELETE FROM 테이블명 WHERE 삭제하고 싶은 은행 조건 ; 

DELETE FROM TB_CUST_BADGE 
WHERE CUST_ID = 'C0001'
 AND BADGE_ID = 'B001'## 추가조건을 주면서 내가 원하는 행을 정확하게 삭제하는거

(1) WHERE 뒤에 삭제할 행의 조건을 입력함( 그렇지 않으면 모든 행이 삭제됨)

(2) ROLLBACK이라는 명령어로 되돌릴 수 있음 ( 자세한건 TCL에서 다룰 예정)

 

TCL

: Trancsaction control language  

: 트랜잭션은 어떤 업무를 수행하기 위해 일련의 단계를 의미함 

- COMMIT 

- ROLLBACK

- SAVEPOINT 

 

EX. A가 B에게 백만원을 송금하려고 하면, 어떤 일련의 과정을 거쳐 송금 업무가 이뤄지는지 생각해 보자 

(1) 강태우의 A계좌에 잔액이 백만원 이상인지 확인 

: SELECT 잔액 FROM 계좌정보 WHERE 계좌번호 = ‘A계좌’ AND 잔액 >= 1,000,000;

(2)  A계좌에 잔액에서 백만원을 차감함 

: UPDATE 계좌정보 SET 잔액 = 잔액 -1,000,000 WHERE 계좌번호 = ‘A계좌’ ; 

(3) B계좌 잔액에서 백만원을 더함 

: UPDATE 계좌정보 SET 잔액 = 잔액+1,000,000 WHERE 계좌번호 = ‘B계좌’ ; 

(4) 송금 업무가 완료 됨 

: COMMIT; 송금 업무를 위한 일련의 절차가 정상 처리되었으니 데이터를 영구반영합니다. 

 

-> 트랜잭션 중에 오류가 생기면 ? 

--> ROLLBACK 

 

[트랜잭션의 특징 4가지] ★ ★ ★ 

1. 원자성 ATOMICITY , 트랜잭션은 모두 성공하거나 전혀 실행되지 않아야 함 (all or nothing)

2. 일관성 CONSISTENCY, 트랜잭션 실행 전 db 내용이 정상이라면 트랜잭션 후에도 db내용이 정상이어야 함 

3. 고립성/ 격리성 ISOLATION, 트랜잭션 실행 도중에 다른 트랜잭션이 영향을 주면 안됨 

4.지속성 DURABILITY, 트랜잭션이 성공적으로 수행되면, 영구적으로 db에 저장되어야 함 

 

COMMIT/ROLLBACK 작동 예시 - 단골문제  ★  ★  

 

ROLLBACK을 특정 지점 까지만 원상 복구를 하도록 조절해주는 문법임 

-> 여기서 특정 지점이란 마지막 COMMIT 시점을 말함 

 

+) SAVEPOINT 

: 예를 들어 게임을 하다 죽어써. 아이템을 써서 죽은시점에서 다시 시작하겠냐고 물어보잖아 

: 이때 죽은 그 시점부터 다시 시작하는 것을 SAVEPOINT라는 거지

 

주의 ! (오라클과 SQL SERVER 차이 ) 

오라클에서 DML (INSERT, UPDATE, DELETE, MERGE) -> 수동 COMMIT 

오라클에서 DDL (CREATE, ALTER, DROP) -> 자동 COMMIT 

이렇게 자동으로 COMMIT 되는 것을 전문 용어로 AUTO COMMIT 이라고 함 

SQL SERVER 는 DML, DDL 모두 자동 COMMIT , 즉 AUTO COMMIT 이라고 함 

 

-> ROLLBACK은 마지막 COMMIT 시점으로 돌아간다고 말해따 !!!!!! 

 


DDL 

: DATA  DEFINITION LANGUAGE 

: 테이블 같은 객체를 생성, 수정, 삭제를 할 수 있음 

 

- CREATE 

- ALTER 

- DROP

- RENAME

- TRUNCATE 

 

CREATE 

: 새로운 객체를 생성할 때 사용하는 명령어임 

- 테이블 생성 전에 필요한 자료형으로는  

-- VARCHAR2(N)

- NUMBER(N,M)

- DATE 

 

제약 조건에 대해 알아보기 ★  ★  

: 제약 조건이란 테이블에 입력가능한 데이터를 조건으로 제약하는 것을 말함 

 

- PRIMARY KEY (PK) , 식별자

- UNIQUE KEY(UK) , 중복안되고 NILL허용 

- NOT NULL , 필수적으로 입력 받을거면 NOT NULL 세팅하라는 거 

- CHECK

- FOREIGN KEY (FK) , 외래키 

 

[PRIMARY KEY (PK) , 식별자 ] 

: NOT NULL + UNIQUE 

: 식별자 규칙을 물리적 모델링 한 것으로 NULL값 입력 불가, 중복 불가의 특징을 가짐 

:  특정 컬럼을 식별자로 만들면 자동으로 NOT NULL + UNIQUE 성질로 바뀌게 됨 

ex. alter table quiz_table add constrant pk_quiz_table primary key (Q_ID) ; 

 

[ UNIQUE KEY(UK) ]

: PK 와는 다르게 NULL 값을 입력할 수 있게 하며, 중복은 불가능함 

 

문법 

: ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 UNIQUE ( 컬럼 ) ; 

 

[NOT NULL]

: NULL 값이 들어오지 않게 함 

 

[CHECK , 도메인, 컬럼 입력 범위 설정 가능] 

: 특정 컬럼에 데이터를 입력할 떄 지정한 데이터만 입력할 수 있도록 함 

ALTER TABLE TB_CUST ADD CONSTRAINT CK_DEL_YN_CHECK (DEL_YN_IN('Y', 'N') ); 

-> Y랑 N의 조건만 맞는 것만 입력가능하게 함.

[FOREIGN KET(FK), 외래키] 

: 테이블끼리 연결되어 있는 관계를 물리적 모델링한 것임 

: 무결성을 지원해줌 

: 관계썬 = FOREIGN KEY 

 

- ADD , 테이블에 컬럼을 추가 

-DROP COLUMN , 테이블에서 컬럼을 삭제 

- MODIFY, 테이블에서 컬럼 속성 변경 

- RENAME , 테이블에서 컬럼의 이름을 변경 

 

(1) 테이블 삭제하기 ,DROP 

-> DROP  =! DELETE 

-> DROP 은 테이블 자체를 삭제하는 거 

-> DELETE는 행을 없애는거임 

(2) 제약조건 삭제하기 DROP CONSTRAINT 

(3) TRUNCATE, DROP, DELETE 차이 확인 

 

- DROP TABLE , 테이블을 영구적으로 삭제함 

- DROP TABLE STUDENT CASCADE CONSTRAINT; , 학생 컬럼으로 연결된 FK도 같이 제거 

- TRUNCATE는 테이블의 데이터를 삭제함 

-> 이 세가지 차이점 중요 ★ ★ ★

 

DCL , DATA CONTROL LANGUAGE 

: 데이터 제어, 데이터베이스는 권한을 부여, 회수하면서 객체를 보호함 

- GRANT

- REVOKE 

- ROLE 

 

[GRANT]

: 권한을 부여하는 명령어임 

grant 부여할권한 [ on 대상객체 ] to 부여받을계정 [with grant option ] 

: grant에 있는 with grant option은 권한을 부여받은 사람이 해당 권한을 또 다른 사람에게 권한을 부여할 수 있는 걸 말함 

[REVOKE ] 

: 권한을 다시 회수하는 것을 말함 

: revoke 회수할권한 [ on 회수할객체 ] from 회수당할계정 


오늘 제가 준비한 4주차 관리구문은 여기까지입니다 ! 

다들 끝까지 마무리 잘하시구

좋은 결과 들고 

만나요 !