컴퓨터 안에 기록되어 있는 숫자를 의미, 이러한 데이터의 집합을 데이터베이스라고 한다.
데이터베이스 내의 데이터는 영구적 이어야 한다.
데이터베이스에 적재된 데이터 작업을 수행할 뿐만 아니라 데이터베이스르 보호하고 보안을 제공한다.
생산성 : 데이터 검색, 추가, 삭제, 갱신과 같은 처리가 이루어지는데 이와같은 기능들을 DBMS가 제공한다.
기능성 : 복수 유저의 요청에 대응하거나, 대용량의 데이터를 저장하고 고속으로 검색하는 기능을 제공한다.
신뢰성 : 많은 요청에 대응할수 있도록 만들어져 있다.
크게 정의(구성), 조작, 제어 기능 3가지로 나눌 수 있다.
CREATE, ALTER, DROP, RENAME, TRUNCATE
SELECT, INSERT, UPDATE, DELETE
GRANT, REVOKE
DCL
└ TCL(Transaction Control Language) : 트랜잭션을 제어하는 명령인 COMMIT과 ROLLBACK만을 따로 분리해서 TCL이라고 표현하고 있다.
데이터베이스의 상태를 변환시키는 하나의 논리적적 기능을 수행하기 위한 작업의 단위이며 "쪼갤 수 없는 업무 처리의 최소 단위"이다.
트랜잭션의 특징으로는 3가지가 있다.
트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.
사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다.
하나의 트랜잭션은 Commit되거나 Rollback된다.
Atomicity(원자성) :
트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
Consistency(일관성) :
트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
Isolation(독립성, 격리성) :
둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.
수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
Durablility(영속성, 지속성) :
활동(Active) : 트랜잭션이 실행중인 상태
실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
테이버베이스 생성 : create datebase 데이터베이스명
create database sample
테이블 생성 : create table 테이블명
create table 테이블명(
열이름 자료형 [기본값] [null | not null],
열이름 자료형 [기본값] [null | not null],
...
)
create table sample62(
no integer not null
( not null : 값을 무조건 넣어야한다)
a varchar(30),
(a의 최대 문자열 길이 30까지)
b date,
(b의 날짜를 저장하는 자료형)
new col
)
CHAR는 말 그대로 고정형입니다.
ex) CHAR(8)로 선언 시 글자를 한 개를 넣든 두 개를 넣든 8바이트의 공간을 차지합니다.
VARCHAR는 반대로 가변형 문자열이기 때문에 데이터의 길이에 따라서 가변적으로 길이가 정해집니다.
-> 보통 VARCHAR 사용하는게 좋음.
date : 날짜
datetime : 날짜와 시간까지 저장
기존이름(X), DBMS 예약어(X)
숫자로 시작(X),
특수문자(X) 다만 언더스코어( _ ) 는 사용가능
한글을 사용할 떄는 더블쿼트" "로 둘러싼다 (MySQL에서는 백쿼트 ' ')
의미없는 이름을 붙이지 않도록 하는게 좋다.
데이터베이스 객체는 스키마라는 그릇 안에 만들어진다. 따라서 객체의 이름이 같아도 스키마가 서로 다르다면 상관없다.
MySQL 설치할때 주의점
컴퓨터의 사용자 이름이 한글이라면 설치할때 오류가 발생시킬 수 있으므로 사용자 이름을 영어로 변경해주는 것이 좋다.
MySQL 실행
File - New Query Tab (Ctrl + T)
Ctrl + Enter 하면 명령을 실행시킴
위 과정을 진행 하면 바로 데이터베이스가 생성되는데 확인하려면 네비게이션바에서 새로고침버튼을 눌러서 새로고침 해줘야 한다.
이렇게하면 데이터베이스가 생성된걸 확인 할 수 있음.
이제 테이블을 생성해보자
create database sample; -- sample데이터베이스 생성
use sample; -- 수많은 데이터베이스 중에서 sample데이터베이스를 사용
create table sample62( -- sample62테이블 생성
no integer not null,
a varchar(30),
b date
);
현재 목록에 존재하는 데이터베이스 중 특정 데이터베이스를 사용하고 싶을 때 사용하는 쿼리문
위 코드를 실행했더니 해당 오류가 발생
use sample;에 커서를 두고 먼저 ctrl + enter 해주고 결과 확인
다른곳에 커서 두고 ctrl + enter 하면 테이블이 생성된다.
네비게이션에서 새로고침 하면 생성된걸 확인할 수 있음.
한번 더 ctrl + enter 누르면 이미 존재하는 테이블이라며 생성되지 않는다.
코드 맨 아래줄에 아래의 코드를 추가
drop table sample62; -- sample62 테이블을 삭제
sample62 테이블 삭제 전
삭제 정상적으로 실행됨
sample62 테이블 삭제 후
가급적이면 drop테이블 사용은 안하는게 좋다 -> 해당 테이블 전체를 날림
테이블을 생성한 후 수정을 하려면 ALTER테이블을 사용해서 수정해 주어야한다.
alter table sample62 add newcol int;
-- newcol 열을 추가
정상
alter table sample62 modify a varchar(20);
-- a열의 문자최대 길이를 30->20으로 변경(modify)
변경된걸 확인할 수 있다.
newcol열의 이름을 c열로 바꾸기(change)
alter table sample62 change newcol c varchar(20);
-- newcol열의 이름을 c열로 바꾸고(change),
타입을 int->varchar(20)
insert into sample62(a,c) values('abc','def')
제약조건 위반해서 오류가 발생함
create database sample; -- sample데이터베이스 생성
use sample; -- 수많은 데이터베이스 중에서 sample데이터베이스를 사용
create table sample62( -- sample62테이블 생성
no integer not null,
a varchar(30),
b date
);
-- drop table sample62; -- sample62 테이블을 삭제
-- 테이블 변경
alter table sample62 add newcol int; -- newcol 열을 추가(add)
alter table sample62 modify a varchar(20); -- a열의 문자최대 길이를 30->20으로 변경(modify)
alter table sample62 change newcol c varchar(20);
-- newcol열의 이름을 c열로 바꾸고(change), 타입을 int->varchar(20)
desc sample62;
insert into sample62(no,a,c) values(1,'abc','def')
NOT NULL 제약 NULL값(빈값)이 저장되지 않도록 제한
NOT NULL : NULL값(빈값)이 저장되지 않도록 제한
[ NULL : X, 중복값 : O ]
UNIQUE : 고유키 정의
[ NULL : O, 중복값 : X ]
기본키(PRIMARY KEY)
[ NULL : X, 중복값 : X ]
외래키(FOREIGN KEY)
[ NULL : O, 중복값 : O ]
chekc : 입력 값 범위 제한
EX)
create table sample631(
a int not null,
b int primary key,
c varchar(30)
);
insert into sample631 (c) values('정자바');
위 코드를 실행하면 오류가 나타남
-> 데이터 무결성 위배
a : 에 값이 들어가지 않았기 떄문
b : 기본키인데 값이 없기 때문
값을 아래와 같이 수정해보자
create table sample631(
a int not null,
b int primary key,
c varchar(30)
);
insert into sample631 (a,b,c) values(1,1,'정자바');
정상적으로 값이 들어간다.
중복 아닌값을 주면 정상적으로 실행됨.
EX)
회원가입에서 만약 제약조건을 사용한다면..
id : PRIMARY KEY
passwd : NOT NULL
이름 : NOT NULL(동명이인이 있을 수 있음)
주민등록번호(나라에서 식별하는 유일한 값) : PRIMARY KEY
create table sample631(
a int not null,
b int primary key,
c varchar(30)
);
아래 sql 문장은 실행이 되지 않습니다. 그 이유를 적어보세요.
insert into sample631(b,c) values(3,'그린이')
-> not null인데 a값을 입력하지 않아서 무결성 위배됨
해결책 : a에 값을 주면해결됨
아래 sql 문장은 실행이 되지않습니다. 그 이유를 적어보세요.
insert into sample631(b,c) values(2,2)
-> b값에 중복값이 들어가서
해결책 : 중복아닌 값을 넣으면 됨
아래 sql 문장은 실행이 되는지 안되는지 예상해보고, 그 이유를 적어보세요.
insert into sample631 values(1,3,'그린이')
-> 실행됨, 무결성 제약조건에 위배되는 값은 없음.
3_1. insert into sample631 values(1,3)
이렇게 하면 출력되지 않음
(선택한 데이터베이스가 없습니다. 사이드바의 SCHEMAS 목록에서 데이터베이스 이름을 두 번 눌러 사용할 기본 DB를 선택합니다.)
오류 내용 번역기 돌리면 이렇게 나옴
DB개념
DBMS개념
SQL개념
DDL
CREATE 문법
DROP 문법
ALTER 문법
DML문법
DML
DCL