본문 바로가기
LG 헬로비전 DX DATA SCHOOL/DATA BASE

Data Base 3

by 황밤 2023. 7. 19.
728x90
반응형

2023/07/19

 

2023.07.18 - [LG 헬로비전 DX DATA SCHOOL/DATA BASE] - Data Base 2

 

 

1. 테이블 관련 명령

 

1.1) 테이블 생성 구문

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 이름(

         컬럼이름 자료형 [컬럼 제약 조건 나열],

         컬럼이름 자료형 [컬럼 제약 조건 나열],

         ...

         [테이블 제약 조건]) 옵션 나열;

 

  • 자료형

숫자 : INT(INTEGER), FLOAT, DOUBLE, DECIMAL(전체 자릿수[, 소수 자릿수])

문자 : CHAR(바이트 수), VARCHAR(바이트 수),

          BINARY(바이트 수), VARBINARY(바이트 수),

          TEXT, LONGTEXT, BLOB, LONGBLOB

 

한글을 저장하는 경우는 바이트수 *3

CHAR는 고정된 공간에 저장하고 VARCHAR는 가변 공간에 저장

 

CHAR(30)을 설정한 상태에서 "한글"을 저장하면 30바이트의 공간을 할당받아서 한글을 저장

 

VARCHAR(30) 을 설정한 상태에서 "한글"을 저장하면 30바이트의 공간을 할당받아서 한글을 저장하고 남는 24바이트는 다른 데이터를 저장할 수 있도록 할당합니다.

실제로는 6바이트 공간만 할당합니다.

 

VARCHAR의 경우 데이터가 변경되서 바이트 수가 변경되면 Row Migration(행 이주) 발생 가능성이 있다.

 

프로그래밍에서 CHAR를 연결할 때는 뒤의 빈 칸에 주의해야 한다.

 

MySQL에서 VARCHAR는 대소문자 구별을 하지 않고 비교를 한다.

저장을 할 때는 대소문자를 구별한다.

 

BINARY는 메모리의 코드 값을 저장하는데 이 경우는 대소문자 구분을 한다.

 

VARBINARY를 이용해서 문자열을 저장하면 대소문자 구별해서 비교

 

VARHCHAR를 대소문자를 구별해서 비교할 때는BINARY 함수로 감싸서 비교하면 된다. 

 

TEXT(65535)와 LONGTEXT(43억 글자) 는 긴 문자열을 저장하는데 이용하는데 인덱스 설정이 되지 않는다.

 

BLOB와 LONGBLOB는 대용량의 바이트 배열을 저장하는데 일반적으로 파일의 내용을 저장할 때 사용

 

파일을 데이터베이스에 저장하는 방법

  1. 파일을 별도로 만들고 파일의 경로만 저장하는 방법이 있고(권장)
  2. 파일의 내용을 데이터 베이스에 직접 저장하는 방법

 

  • 날짜와 시간

DATE : 날짜만 저장

DATETIME : 날짜와 시간을 저장하는데 초 단위까지 저장

TIMESTAMP : 날짜와 시간을 저장하는데 미세하게 저장

TIME : 시간만 저장

YEAR : 년도만 저장

 

 

  • 기타

BOOL : TRUE 또는 FALSE

 

JSON : json 문자열

 

GEOMETRY : 공간 데이터

 

 

1.2) 테이블 생성 옵션

 

  • ENGINE

- MyISAM : 조회에 유리하도록 만듬, 인덱스 기능이 우수

 

-InnoDB : 트랜잭션 처리(삽입, 삭제, 갱신)에 유리한데 인덱스 기능이 떨어짐

 

 

  • auto_increment

시퀀스(일련번호)의 초기 값을 설정

ALTER_TABLE 테이블 이름 auto_increment = 초기값 을 이용해서 변경이 가능

 

 

  • DEFAULT CHARSET

인코딩 방식으로 utf8 이나 utf8mb4를 주로 이용

 

 

  • Collation

문자 정렬 방식

 

 

1.3) 테이블에 컬럼 추가

  • 이미 데이터가 있는 경우는 컬럼에 NULL 이 삽입된다.

ALTER TABLE 테이블 이름

ADD 컬럼이름 자료형 [컬럼 제약 조건];

 

 

1.4) 컬럼 삭제

  • 기존의 데이터가 존재하면 데이터는 모두 삭제되며 복구가 안됩니다.

ALTER TABLE 테이블 이름

DROP 컬럼이름;

 

 

1.5) 컬럼 수정

 

  • 이름과 자료형을 수정

ALTER TABLE 테이블 이름

change 기존컬럼이름 새로운컬럼이름 자료형;

 

  • 자료형 변경

ALTER TABLE 테이블 이름

modify 컬럼이름 자료형;

 

NOT NULL(NULL 일 수 없다) 제약조건의 변경은 제약조건 변경이 아니고 자료형 변경으로 취급한다
NOT NULL의 추가나 삭제는 modify 명령을 수행

NOT NULL(바이트를 책정받아 체크! 메모리를 할당하는 것임)

 

  • 컬럼 순서 조정

ALTER TABLE 테이블이름 

MODIFY COLUMN 컬럼이름 자료형 FIRST; (맨앞 위치)

 

ALTER TABLE 테이블이름

MODIFY COLUMN 컬럼이름 자료형 AFTER 다른 컬럼이름; (다른컬럼 뒤 위치)

 

 

1.6)테이블 이름 변경

 

ALTER TABLE 이전테이블 이름

RENAME 새로운 테이블 이름

 

 

1.7)테이블 삭제

 

DROP TABLE 테이블 이름;

외래키가 설정된 테이블은 삭제되지 않는다.

 

 

1.8) 테이블의 모든 데이터 삭제

 

 TRUNCATE TABLE 테이블 이름;

  • 복구가 되지 않으므로 주의!

 

 

1.9) 테이블 압축

  • CREATE TABLE의 옵션으로 ROW_FORMAT=COMPRESSED를 추가하면 압축해서 생성
  • 저장 용량은 줄어들지만, 작업 시간이 늘어난다.

 

 

1.10) 테이블 주석

 

COMMENT ON TABLE 테이블 이름 IS '주석';

-- 데이터베이스 사용 설정

use svng;

-- 테이블 생성
-- 테이블 이름은 contact
-- 속성
-- num은 정수이고 일련번호 그리고 기본키
-- name은 한글 7자 까지 저장하고 글자 수는 변경되지 않는다고 가정 (varchar)
-- address 는 한글 100자 까지 저장하고 글자 수의 변경이 자주 발생
-- tel 은 숫자로된 문자열 11자리이고 글자 수의 변경은 발생하지 않음
-- email 은 영문 100자 이내이고 글자 수의 변경이 자주 발생 (char)
-- birthday는 날짜만 저장
-- 주로 조회를 하고 일련번호는 1부터 시작하고 인코딩은 utf8

CREATE TABLE contact(
	num INTEGER AUTO_INCREMENT PRIMARY KEY,
	name VARCHAR(21),
	address TEXT,
	tel VARCHAR(11),
	email CHAR(100),
	birthday DATE
)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


-- contact 테이블에 age 컬럼을 정수 자료형으로 추가
ALTER TABLE contact
ADD age INTEGER;

-- contact 테이블 구조 확인
DESC contact;


-- contact 테이블에서 age 컬럼 삭제
ALTER TABLE contact
DROP age;

DESC contact;

-- CONTACT 테이블에서 tel 컬럼의 이름을 phone으로 자료형은 정수로 수정
ALTER TABLE contact 
CHANGE tel phone INTEGER;

DESC contact;

-- contact 테이블 삭제!!!!!!!
DROP TABLE contact;

SHOW TABLES;


-- DEPT 테이블은 EMP 테이블에서 DEPTNO 컬럼을 참조하므로 삭제가 안됨.
DROP TABLE DEPT;


-- NOT NULL 제약조건 설정
CREATE TABLE tNullable(
	name CHAR(10) NOT NULL,
	age INTEGER
);

INSERT INTO tNullable(name, age) VALUES("adam", 23);
-- 에러
INSERT INTO tNullable(name, age) VALUES(33);

DROP TABLE tNullable;


-- 기본값 설정
CREATE TABLE tDefault(
	name CHAR(10) NOT NULL,
	age INTEGER DEFAULT 0
);

INSERT INTO tDefault(name, age) VALUES("adam", 23);

INSERT INTO tDefault(name) VALUES("jussi");

-- 데이터 확인
SELECT *
from tDefault




-- name, gender(성별 - 남 또는 여), age(나이는 양수)를 속성으로 갖는 테이블을 생성
CREATE table tCheck(
	name CHAR(10) NOT NULL,
	gender CHAR(3) CHECK(gender IN('남','여')),
	age INT CHECK(age >=0)
	);
	

INSERT into tCheck(name, gender, age) VALUES('김좌진','남', 35);
INSERT into tCheck(name, gender, age) VALUES('김좌진','남', -1);
INSERT into tCheck(name, gender, age) VALUES('김좌진','여자', 35);

SELECT *
from tCheck


-- 기본키 설정 : 제약조건 이름없이 생성
CREATE TABLE tPK1(
	name CHAR(10 PRIMARY Key.
	age INT
	
	))
	
-- 기본키 생성 : 제약조건 이름과 함께 생성	
CREATE TABLE tPK2(
	name CHAR(10),
	age INT,
	constraint PK_tPK2 PRIMaRY KEY(name)
	
-- 2개의 컬럼으로 기본키 설정 : 테이블을 생성할 때 primary key는 한번만 사용이 가능
CREATE TABLE tPK2(
	name CHAR(10),
	age INT PRIMaRY KEY
	CONSTRAINT PK_tPK3 PRIMARY KEY(name, age));
	

INSERT INTO tPK1(name, age) VALUEs('adam', 53);
INSERT INTO tPK1(name, age) VALUEs('adam', 53);
INSERT INTO tPK1(name, age) VALUEs('adam', 53);









-- UNIQUE
CREATE TABLE tUnique(
	name CHAR(10),
	age INT UNIQUE,
	CONSTRAINT tUnique PRIMARY KEY(name));


INSERT INTO tUnique(name, age) VALUEs('adam', 53);
-- 중복되면 삽입 안됨
INSERT INTO tUnique(name) VALUEs('jessica');
INSERT INTO tUnique(name) VALUEs('jessy');
INSERT INTO tUnique(name) VALUEs('jay');

select *
from tUnique;

 


 

 

2. CONSTRAINT(제약 조건)

 

 

2.1) DATA INTIGRITY(무결성)

  • 데이터의 정확성과 일관성을 유지하고 보증하는 것
  • Entity Integrity(개체 무결성) : Primary Key(기본키)는 NULL 이거나 중복될 수 없다.
  • Referential Integrity(참조 무결성) : Foreign Key(외래키, 참조키)는 NULL 이거나 참조할 수 있는 값만을 가져야 한다.
  • Domain Integrity(도메인 무결성) : 컬럼에는 설정한 도메인 값만을 저장해야 한다.

 

 

2.2)NOT NULL

 

필수 입력을 위한 제약조건

컬럼 제약 조건으로만 설정가능하다.

데이터베이스에서는 NULL을 표현할 떄 NULL 값을 저장하는 것이 아니고 NULL을 표현하기 위한 별도의 메모리를 할당합니다.

NOT NULL 이 적용된 컬럼과 NOT NULL 이 적용되지 않은 컬럼은 크기가 1차이가 납니다.

NOT NULL은 제약조건이지만 데이터의 크기와도 연관성이 있습니다.

 

 

2.3) DEFAULT

컬럼의 값이 입력이 안될 때 자동으로 설정되는 값

컬럼의 자료형 다음에 DEFAULT 값

기본값을 사용하고자 하는 경우는 컬럼을 제외하고 입력하던가 DEFAULT로 입력하면 된다.

 

 

2.4) CHECK

속성의 값을 제한하는 제약조건

CHECK(컬럼이름 조건)

         성별은 남 또는 여만 가져야 한다.

         gender CHAR(3) CHECK(gender in ('남', '여'))

  

         점수는 0에서 100사이의 값을 가져야 한다.

         score INTEGER CHECK(gender in ('남, '여'))

 

 

2.5) Primary Key

  • 기본키를 설정
  • 기본키는 NOT NULL 이고 UNIQUE
  • 테이블에서 기본키는 하나만 설정 가능
  • 컬럼 제약 조건으로 설정할 수 있고 테이블 제약 조건으로 설정할 수도 있습니다.
  • 하나의 속성으로 설정할 수 있고 여러 개의 속성으로도 설정 가능

단 여러개의 속성으로 설정할 때는 테이블 제약 조건으로 설정해야 합니다.

컬럼 제약 조건은 컬럼의 자료형 뒤에 설정하는 것이고 테이블 제약 조건은 컬럼을 전부 정의한 후 제약 조건을 설정하는 것입니다.

  • 기본키를 설정하면 인덱스가 생성되고 MySQL은 기본키 순서대로 저장됩니다.

 

  • 컬럼 제약 조건

컬럼이름 자료형 [CONSTRAINT 제약조건이름] PRIMARY KEY(컬럼 이름 나열)

 

  • 테이블 제약 조건

컬럼이름 자료형 [CONSTRAINT 제약조건이름] PRIMARY KEY(컬럼 이름 나열)

 

 

  • 제약조건 이름을 만드는 이유는 나중에 관리를 편리하게 할려고 하는 것이다.

 

2.6) UNIQUE

 

중복된 값을 허용하지않는 머시

 

 

 

2.7) Foreign KEY (외래키)

 

  • 다른 테이블을 참조하기 위한 속성
  • 다른 테이블에서는 PRIMARY KEY 나 UNIQUE 한 속성이어야 한다.
  • 설정방법
  • 컬럼 제약 조건

references 참조할 테이블 이름(컬럼이름) [옵션]

 

  • 테이블 제약 조건

            [constraint 이름] FOREIGN KEY(외래키 컬럼 이름) REFERENCES 참조할 테이블 이름(컬럼이름) [옵션]

 

  • 옵션없이 외래키를 설정하면 외래키의 값은 NULL 이거나 참조할 테이블에 존재하는 값만 삽입이 가능하며 참조당하는 테이블에서는 참조되는 데이터를 삭제할 수 없다.
  • 외래키를 설정할 때는 1:1의 경우는 양쪽 테이블의 기본키를 다른 테이블에 외래기로 추가해야 하고 1:N 관계 에서는 1쪽의 기본키를 N쪽에 외래키로 추가해야 하며 N:N의 경우는 양쪽의 기본키를 외래키를 갖는 별도의 테이블을 생성해야 합니다.
  • 옵션

ON DELETE {NO ACTION | CASCADE | SET NULL | SET DEFAULT} : 4가지 중 선택해서 사용 가능

ON UPDATE {NO ACTION | CASCADE | SET NULL | SET DEFAULT} : 4가지 중 선택해서 사용 가능

 

NO ACTION : 참조하고 있는 테이블에 변화가 있어도, 아무 액션을 취하지 않는 것.

CASCADE : 같이 수정 및 삭제(tEmployee 테이블에서 아이린을 삭제하려 하면, tProject 테이블에서 아이린이 있는 모든 데이터를 같이 수정/삭제)

SET NULL : NULL로 변경(tEmployee 테이블에서 아이린을 삭제하려 하면, tProject 테이블에서 아이린이 있는 모든 데이터가 NULL로 변경)

SET DEFAULT : 기본값으로 변경(tEmployee 테이블에서 아이린을 삭제하려 하면, tProject 테이블에서 아이린이 있는 모든 데이터를 기본값으로 변경)

 

 

2.8) AUTO_INCREMENT

 

MySQL에서 일련번호를 설정하기 위해서 사용하는 것

하나의 테이블에서 한 번만 사용 가능

AUTO_INCREMENT 가 설정된 컬럼은 UNIQUE나 PRIMARY KEY 제약조건이 설정되어야 합니다.

테이블을 만들 때 초기 값을 설정할 수 있고 ALTER TABLE 명령을 이용해서 초기 값을 변경할 수 있습니다.

AUTO_INCREMENT가 설정되어 있어도 직접 값을 입력할 수 있습니다 - 권장은 하지 않음

 

-- 외래키를 지정하지 않는 2개의 테이블

-- 직원 테이블

create table tEmployee(
	name CHAR(10) primary key,
	salary INT NOT NULL,
	addr VARCHAR(30) NOT NULL);
	
insert into tEmployee VALUES('아이린','650','대구');
insert into tEmployee VALUES('정만수','850','광주');
insert into tEmployee VALUES('김덕배','1050','서울');

SELECT *
from tEmployee;

-- 프로젝트 테이블
-- employee는 프로젝트에 참여한 직원 이름
create table tProject(
	projectid int primary key,
	employee char(10) not null,
	poject varchar(30) not null,
	cost int);

insert into tProject values(1, '아이린', ' 웹서비스', 3000);
insert into tProject values(2, '조이', ' Microservic 구축', 4000);
	

select *                                                                                                                                                                                                                                                                                                                                                                                                                         
from tProject

DROP TABLE tEmployee;
DROP table tProject;


show tables;


-- 외래키 설정 - 직원 과 프로젝트의 관계는 1: N
-- 직원 테이블
create table tEmployee(
	name CHAR(10) primary key,
	salary INT NOT NULL,
	addr VARCHAR(30) NOT NULL);
	
insert into tEmployee VALUES('아이린','650','대구');
insert into tEmployee VALUES('정만수','850','광주');
insert into tEmployee VALUES('김덕배','1050','서울');

select *                                                                                                                                                                                                                                                                                                                                                                                                                         
from tEmployee


-- 프로젝트 테이블
create table tProject(
	projectid int primary key,
	employee char(10) not null references tEmployee(name),
	poject varchar(30) not null,
	cost int,
	constraint FK_emp foreign key(employee) references tEmployee(name));

insert into tProject values(1, '아이린', ' 웹서비스', 3000);

-- 조이는 tEmploee 테이블에 없는 이름이라서 삽입 불가능
insert into tProject values(2, '조이', ' Microservic 구축', 4000);
-- tEmployee 테이블의 데이터를 삭제

DELETE from tEmployee where name = '정만식';
-- 정만식은 지워지지만, 아이린은 지울수 없다.. 왜? foreign key 니까! 외부 참조니까!
-- tProject에서 참조 중이므로 불가.


DROP table tEmployee;
-- 실행 x, 외부 참조로 인해 삭제가 불가능한 상태가 되었음!

DROP TABLE tProject;
DROP TABLE tEmployee;

SHOW TABLES;
-- 우선 프로젝트, EMPLOYEE 테이블을 삭제후 확인.


-- 직원 테이블
create table tEmployee(
	name CHAR(10) primary key,
	salary INT NOT NULL,
	addr VARCHAR(30) NOT NULL);
	
insert into tEmployee VALUES('아이린','650','대구');
insert into tEmployee VALUES('정만수','850','광주');
insert into tEmployee VALUES('김덕배','1050','서울');

SELECT *
FROM tEmployee;


-- 프로젝트 테이블
-- tEmployee 테이블의 name 이 수정되거나 삭제 될 시, 같이 수정 혹은 삭제가 된다.
create table tProject(
	projectid int primary key,
	employee char(10) ,
	poject varchar(30) ,
	cost int,
	constraint FK_emp foreign key(employee) references tEmployee(name)
		ON DELETE SET null ON UPDATE SET null
);



-- 아이린의 데이터를 삽입
insert into tProject values(1, '아이린', ' 웹서비스', 3000);

SELECT *
FROM tProject;


-- temployee 테이블에서 배주현을 삭제
DELETE from tEmployee WHERE name = "배주현";
UPDATE tEmployee SET name = '배주현' WHERE name = '아이린';

SELECT *
FROM tEmployee;

-- 둘다 바뀐것을 확인!
-- 제약 조건을 줌에 따라 일관성을 획득할 수도, 혹은 제약을 없애 일관성을 없앨 수도 있다.

 

 

2.9) 제약조건 작업

  • 조회
select *
from information_schema.table_constraints; -- 테이블당 제약조건을 확인 가능 명령

 

  • 제약조건 수정

alter table 테이블이름

modify 컬럼이름 자료형 제약조건;

 

  • 제약조건 추가

alter table 테이블이름

add 테이블 제약조건 형태로 작성;

 

  • 제약조건 삭제

alter table 테이블이름

drop 테이블 제약조건 이름;

 

 

3. DML

  • 데이터를 삽입하고 삭제하고 수정하는 명령
  • 이론에서는 select 도 dml로 간주하지만 실무에서는 select는 dql로 분리

 

3.1) 데이터 삽입

  • 기본형식

insert into 테이블이름(컬럼 이름 나열)

values(값을 나열)

 

모든 컬럼에 값을 순서대로 삽입할 때는 컬럼이름을 제외해도 됨.

제외된 컬럼은 default 값이 있으면 default 값(auto_increment 포함)이 설정되고, 없으면 null이 된다.

 

oracle에서는 into를 생략해도 됩니다.

 

values 다음에 여러 개의  데이터를 입력해서 한꺼번에 삽입하는 것이 가능하다.

 

 

  • SELECT 구문의 결과를 삽입

INSERT INTO 테이블 이름(컬럼이름)

SELECT 구문

 

  • SELECT 구문의 결과로 테이블을 생성 - 테스트 할 때 주로 이용

CREATE TABLE 테이블이름 AS

SELECT 구문

 

  • 스크립트를 이용해서 삽입할 때 INSERT 다음에 IGNORE를 추가하면 에러가 발생해도 다음 스크립트를 수행한다.

 

 

3.2) 데이터 삭제

  • 기본형식

delete from 테이블 이름

[where 조건];

 

where 절을 생략한다면, 테이블의 모든 데이터를 삭제하게 됨.

SELECT * from tCity;

-- tcity 에서 대전인 데이터 삭제
DELETE from tCity where name = "대전";

 

 

3.3) 데이터 갱신

 

  • 기본형식

update 테이블 이름

set 컬럼이름 = 수정할 내용[, 컬럼이름 = 수정할 내용...]

[where 조건];

 

where 절을 생략하면 테이블의 모든 데이터를 수정합니다.

 

 

 

4. TCL(Transaction Control Language)

4.1) transaction

  • 개념

논리적으로 한번에 이루어져야 하는 작업의 단위

 

  • 성질

Atomicity : ALL OR NOTHING(전부 혹은 전무)

 

Consistency : 트랜잭션 수행 전과 수행 후의 결과가 일관성이 있어야 한다.

 

Isolation : 트랜잭션 작업 중 다른 트랜잭션이 사용 중인 데이터에 접근해서는 안된다.

 

Durability : 완료된 트랜잭션은 계속 되어야 한다.

 

  • 동작

COMMIT : 작업 내역을 원본에 반영

- DB와 Application이 작업을 처리할 때, DB에서 복사본을 만들어 Application에 가져온다. 그 작업 영역에 세션(코드값)이 부여된다.
따라서 Application 에서 작업을 진행해도, DB에 있는 원본은 수정되지 않으나, Commit을 하면 수정한 내용을 원본에 복사를 하게 된다.

 

ROLLBACK : 작업 내역을 원본에 반영하지 않는 것

- 수정한 내용이 맘에 안들면, 수정된 복사본을 없애고 원본을 그대로 유지하는 것임.

물리적인 단위 - SQL 문장 한개

 

논리적인 단위 - TRANSACTION(SQL, 물리적인 단위와는 상관없이 한번에 이루어져야 하는 작업)

 

TRANSACTION이란?

EX) A가 B에게 물건을 판매할 때, C를 500에 판매.
판매를 한다면 C를 업데이트 해야됨 (A 의 C 개수- 1, B의 C개수 + 1/ 돈: A + 500, B - 500)
판매 자체는 물리적으로 4개 임. 그러나 트랜잭션은 1개! 전체 거래를 위한 연산.

따라서 이중에 하나라도 완수가 안되면 판매 행위 자체가 이루어지지 않기 때문에 ALL OR NOTHING 이다. 
-> ATOMICITY

거래가 진행 될 수록, C의 개수의 증감, 돈의 증감은 일정해야 함.
-> CONSISTENCY

거래 중에, 갑자기 새로운 돈이 들어온다는 둥의 데이터 유입은 안된다.
-> ISOLATON

거래가 진행되었으면, 펜의 이동과 돈의 이동이 정확히 완료가 되어야한다. 취소 X
-> DURABILITY

 

4.2) Transaction 관련 명령어

 

  • commit : 현재까지 작업 내역을 원본에 반영
  • rollback [to 세이브포인트이름]: 세이브포인트 자리로 작업을 이동
  • 세이브포인트 이름을 작성하지 않으면 트랜잭션을 생성한 위치로 이동
  • savepoint 이름 : 세이브포인트 생성

 

 

4.3) transaction 생성 시점

 

  • Transaction 이 없는 시점에서 DML(insert, delete, update) 문장을 처음 실행할 때

 

 

4.4) Transaction 이 종료시점

 

  • commit 이나 roll back이 수행되면 transaction은 자동 종료

 

 

4.5) commit 하는 방법

 

  • 명시적으로 commit 명령을 수행
  • DDL 이나 DCL 문장을 수행 (AUTO COMMIT : 수행 완료시 자동 COMMIT)
  • 접속 프로그램을 정상 종료
DDL/DCL은 관리자의 명령이기 때문에, 작업 내용은 바로 모든 USER에게 반영이 되어야 하기 때문에 COMMIT이 자동으로 수행되도록 되어있음.

 

 

4.6) ROLLBACK 하는 방법

  • 명시적으로 ROLLBACK 명령을 수행
  • 접속 프로그램을 비정상적으로 종료(직접 종료하는 것이 아니고, 특수한 상황이 발생한 경우)

 

 

4.7) 트랜잭션 모드

 

  • MANUAL COMMIT : 트랜잭션 동작을 직접 조작하는 것
  • AUTO COMMIT : 하나의 SQL 문장을 수행하면 바로 COMMIT이 이루어짐
JAVA, DBeaver 기본적으로 AUTO COMMIT 이다.

SQL 에 INSERT 문장이 있다면, COMMIT 효과로 인해, 그 뒤엔 INSERT를 실행해선 안된다. 따라서 SELECT로 불러와 새로 실행해야함. 

 

트랜잭션 시에는 AUTO COMMIT 이 아닌 MANUAL COMMIT으로 수행해야 적절하다.

반응형
LIST

'LG 헬로비전 DX DATA SCHOOL > DATA BASE' 카테고리의 다른 글

파이썬 MySQL 연동  (0) 2023.07.20
DATA BASE 4  (0) 2023.07.20
Data Base 2  (0) 2023.07.18
Data Base  (0) 2023.07.17
DataBase - 기초  (0) 2023.07.14