(SQL 첫걸음) 데이터 베이스 #1

jjinny_0609·2023년 3월 9일
0

데이터베이스

목록 보기
11/17
post-thumbnail

데이터베이스와 SQL

데이터베이스란

컴퓨터 안에 기록되어 있는 숫자를 의미, 이러한 데이터의 집합을 데이터베이스라고 한다.

데이터베이스 내의 데이터는 영구적 이어야 한다.

DBMS(Database Management System) 데이터베이스 관리 시스템

데이터베이스에 적재된 데이터 작업을 수행할 뿐만 아니라 데이터베이스르 보호하고 보안을 제공한다.

DBMS와 같은 전용 소프트웨어가 필요한 이유

  • 생산성 : 데이터 검색, 추가, 삭제, 갱신과 같은 처리가 이루어지는데 이와같은 기능들을 DBMS가 제공한다.

  • 기능성 : 복수 유저의 요청에 대응하거나, 대용량의 데이터를 저장하고 고속으로 검색하는 기능을 제공한다.

  • 신뢰성 : 많은 요청에 대응할수 있도록 만들어져 있다.

데이터 베이스 관리 시스템의 기능

크게 정의(구성), 조작, 제어 기능 3가지로 나눌 수 있다.

  • DDL(Data Definition Language), 데이터정의(구성) : 데이터베이스에 저장될 자료의 구조와 응용 프로그램이 이 구조를 이용하는 방식을 정의하는 기능. 레코드 구조의 정의, 데이터 모형의 정의, 물리적 구조의 정의 등을 포함한다.
 CREATE, ALTER, DROP, RENAME, TRUNCATE
  • DML(Data Mainipulation Language), 데이터조작 : 사용자의 요구에 따라 데이터베이스에 접근하여 저장된 자료를 검색, 갱신, 삽입, 삭제할 수 있도록 하는 기능. 사용자들은 쉽고, 명확하고 효율적인 데이터 언어(data language)로 데이터베이스의 데이터를 조작할 수 있다.
 SELECT, INSERT, UPDATE, DELETE
  • DCL(Data Control Language), 데이터제어, : 사용자가 데이터를 조작하려는 작업이 데이터 무결성(data integrity)을 파괴하지 않도록 작업 요청을 제어하는 기능. 접근하는 사용자의 권한을 검사하여 보안을 유지하며, 여러 사용자가 데이터베이스에 동시에 접근하여 데이터를 처리할 경우 처리 결과가 항상 정확성을 유지하도록 한다.
 GRANT, REVOKE

       DCL
        └ TCL(Transaction Control Language) : 트랜잭션을 제어하는 명령인 COMMIT과 ROLLBACK만을 따로 분리해서 TCL이라고 표현하고 있다.

여기서 트랜잭션(transaction)이란?

데이터베이스의 상태를 변환시키는 하나의 논리적적 기능을 수행하기 위한 작업의 단위이며 "쪼갤 수 없는 업무 처리의 최소 단위"이다.

트랜잭션의 특징으로는 3가지가 있다.

  1. 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.

  2. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다.

  3. 하나의 트랜잭션은 Commit되거나 Rollback된다.

트랜잭션의 성질

Atomicity(원자성) :

  1. 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.

  2. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.

Consistency(일관성) :

  1. 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.

  2. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

Isolation(독립성, 격리성) :

  1. 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.

  2. 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

Durablility(영속성, 지속성) :

  1. 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

트랜잭션의 상태

활동(Active) : 트랜잭션이 실행중인 상태

실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태

철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태

완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태


다양한 데이터베이스

데이터베이스 종류

  • 계층형 데이터베이스 : 역사가 오래된 DBMS로, 폴더와 파일 등의 계층형 데이터 베이스라고 할 수 있습니다.
  • 관계형 데이터베이스 : 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가르킨다. (엑셀시트)
  • 객체지향 데이터베이스 : '가능하면 객체 그대로를 데이터베이스의 데이터로 저장하는 것'이 객체지향 데이터베이스이다.
  • XML 데이터베이스 : XML 형식으로 기록된 데이터를 저장하는 데이터베이스이다. SQL을 사용하지 못하지만, XQuery라는 전용 명령어를 사용한다.
  • 키-밸류 데이터베이스(KVS) : 키와 그에 대응하는 값(value)라는 단순한 형태의 데이터를 저장하는 데이터 베이스이다.

데이터베이스 객체 작성과 삭제

테이버베이스 생성 : 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와 VARCHAR의 차이

CHAR는 말 그대로 고정형입니다.
ex) CHAR(8)로 선언 시 글자를 한 개를 넣든 두 개를 넣든 8바이트의 공간을 차지합니다.
VARCHAR는 반대로 가변형 문자열이기 때문에 데이터의 길이에 따라서 가변적으로 길이가 정해집니다.
-> 보통 VARCHAR 사용하는게 좋음.

date와 datetime

date : 날짜
datetime : 날짜와 시간까지 저장

데이터베이스명 or 테이블명 규칙

기존이름(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 (원하는 데이터베이스 이름);

현재 목록에 존재하는 데이터베이스 중 특정 데이터베이스를 사용하고 싶을 때 사용하는 쿼리문

위 코드를 실행했더니 해당 오류가 발생

use sample;에 커서를 두고 먼저 ctrl + enter 해주고 결과 확인

다른곳에 커서 두고 ctrl + enter 하면 테이블이 생성된다.

네비게이션에서 새로고침 하면 생성된걸 확인할 수 있음.

한번 더 ctrl + enter 누르면 이미 존재하는 테이블이라며 생성되지 않는다.


테이블 삭제(DROP, TRUNCATE)

  • DROP 예제

코드 맨 아래줄에 아래의 코드를 추가

drop table sample62; -- sample62 테이블을 삭제

sample62 테이블 삭제 전

삭제 정상적으로 실행됨

sample62 테이블 삭제 후

가급적이면 drop테이블 사용은 안하는게 좋다 -> 해당 테이블 전체를 날림

  • TRUNCATE 예제
    테스트를 위해 테이블을 생성

ALTER

테이블을 생성한 후 수정을 하려면 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,'정자바');

정상적으로 값이 들어간다.


25번줄에 아래와 같이 주면 기본키에 중복값이 들어가서 오류가 발생함. ``` 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)
);
  1. 아래 sql 문장은 실행이 되지 않습니다. 그 이유를 적어보세요.
    insert into sample631(b,c) values(3,'그린이')
    -> not null인데 a값을 입력하지 않아서 무결성 위배됨
    해결책 : a에 값을 주면해결됨

  2. 아래 sql 문장은 실행이 되지않습니다. 그 이유를 적어보세요.
    insert into sample631(b,c) values(2,2)
    -> b값에 중복값이 들어가서
    해결책 : 중복아닌 값을 넣으면 됨

  3. 아래 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

profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :

0개의 댓글