부트캠프에서 처음으로 java수업을 받고 있기에 기록하는게 좋다고 생각했고, 수업이 있는 날이면 매일 글을 쓰려고 합니다. 쵀대한 몰랐거나 필요하다고 생각되는 내용 위주로 기록할 예정입니다. (제가 게을러서 이러한 시도를 성공한 적이 없기에 이번 부트캠프 목표 중 1가지입니다. 할 수 있도록 화이팅!!)
Transaction이란 하나의 논리적인 작업 단위를 묶어서 실행하고, 이를 원자적으로 처리하는 개념입니다. 즉, 트랜잭션 내의 모든 작업이 성공적으로 완료되거나, 하나라도 실패하면 전체를 되돌릴 수 있도록 보장한다. (MYSQL 기본적으로 COMMIT이 자동으로 되므로 수동으로 조절하고 싶으면 AUTO COMMIT 설정을 바꿔 주어야 한다.)
# 정상적인 트랜잭션 실행
START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE id = 1;
UPDATE accounts SET balance = balance + 500 WHERE id = 2;
COMMIT;
# 오류 발생
START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE id = 1;
UPDATE accounts SET balance = balance + 500 WHERE id = 2;
-- 만약 오류 발생
IF (SELECT balance FROM accounts WHERE id = 1) < 0 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
DDL (Data Definition Language)은 데이터베이스 객체(테이블, 인덱스, 뷰 등)의 구조를 정의하고 관리하는 SQL 명령로 데이터를 직접 다루지는 않지만, 데이터가 저장될 구조를 생성하고 변경하는 역할을 한다.
/* CREATE */
-- 테이블 생성을 위한 구문
-- IF NOT EXISTS 를 적용하면 기존에 존재하는 테이블이라도 에러가 발생하지 않는다.
-- tb1 생성
create table if not exists tb1(
pk int primary key,
fk int,
col1 varchar(255),
check(col1 in('y', 'n'))
)engine=innodb;
-- 테이블 구조 확인
describe tb1;
insert into tb1 values (1,10,'y');
select * from tb1;
/* AUTO INCREMENT */
-- INSERT 시 PRIMARY KEY키에 해당하는 컬럼에 자동으로 번호를 발생(중복되지 않게)시켜 저장할 수 있다.
create table if not exists tb2(
pk int auto_increment primary key,
fk int,
col1 varchar(255),
check(col1 in('y', 'n'))
)engine=innodb;
describe tb2;
insert into tb2 values(null, 10, 'y');
insert into tb2 values(null, 20, 'y');
select * from tb2;