본문 바로가기

DB 수업 정리

DB 1일차

DBMS (Data Base Management System)

파일 시스템의 문제점인 데이터의 중복성과 종속성 등의 문제를 최소화하기 위해 등장. 

모든 사용자나 응용 프로그램들이 데이터베이스를 공유할 수 있도록 관리, 운영해 주는 소프트웨어 시스템

 

DBMS 필수기능 세가지

 

1. 정의기능

- 데이터의 형태, 구조 등 데이터베이스의 저장에 관한 여러 가지 사항을 정의하는 기능

 

2. 조작기능

- 사용자가 이용할 수 있도록 요구에 따라 검색, 갱신, 삽입, 삭제 등을 지원하는 기능

 

 

3. 제어기능

- 데이터의 정확성과 안전성 유지를 위한 기능으로, 데이터 무결성 유지, 보안, 병행 제어 등을 제공

 

데이터베이스 언어
정의어 (DDL)
- 데이터베이스 구조를 정의 및 수정하기위해 사용되는 언어
조작어 (DML)
- 데이터베이스 내의 자료를 검색,삽입,수정,삭제하 위해 사용되는 언어
제어어 (DCL)
- 데이터베이스의 무결성 유지, 보안, 병행 제어, 보호와 관리를 위한 언어

 

DB 구조
스키마 (Schema) : 데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술.

내부스키마

- 물리적 저장 장치 관점에서 본 DB의 물리적인 구조
개념스키마
- 논리적 관점(사용자) 에서 본 전체적인 데이터 구조
외부스키마
- 사용자가 사용하는 한 부분에서 본 논리적 구조
- 서브스키마라고도 함.

 

데이터 모델의 정의와 종류

 

데이터 모델에 표시할 요소

- 구조 : 논리적으로 표된 개체 타입들 간의 관계

- 연산 : DB에 저장된 실제 데이터를 처리하는 작업 대한 명세

- 제약조건 : DB에 저장될 수 있는 실제 데이터의 논리적인 제약 조건

 

데이터 모델의 구성 요소

- 개체(Entity) : 데이터베이스에 표현하려는 것, 서로 연관된 몇 개의 속성으로 구성

- 구성(Attribute) = 속성  : 데이터의 가장 작은 논리적 단위, 파일 구조상 데이터의 항목 또는 필드에 해당.

                                        개체를 구성하는 항목.

- 관계(Relationship) : 개체간의 관계 또는 속성간의 관계, 1:1 / 1:다관계 / 다 : 다관계  

 

E-R 모델

 

개체-관계(Entity-Relationship) 모델의 특징
 ◦ 개체타입과 이들 간의 관계 타입을 이용해 현실 세계를 개념적으로 표현

 

 

 

 

데이터 베이스 설계

데이터베이스의 스키마를 정의하고, 이에 따라 DB를 구현하기 위한 전반적인 과정

 

요구 조건 분석 과정시간이 굉장히 길다.
 - 그 이후에 구조를 수정 ( 추가 / 제거 ) 하려면 처음부터 다시 고쳐야하기 때문에 초반에 설계를 잘해야함.

 

관계형 데이터베이스

 

 

 

튜플 : 릴레이션을 구성하는 각 행(레코드), 속성의 모임

-  튜플의 수 : 카디널리티 또는 기수라고도 함

속성 : DB를 구성하는 가장 작은 논리적 단위(필드), 개체의 특성

- 속성의 수 : 디그리 또는 차수라고도 함.

도메인 : 하나의 어트리뷰가 취할 수 있는 모든 원자값들의 집합 

 

관계형 데이터베이의 제약조건 

 

키(key) : 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이되는 애트리뷰트를 말함.

 후보키(Candidate Key) : 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합,  유일성과 최소성을 만족해야 한다.
 기본키(Primary Key) : 후보키 중에서 선택한 주키(Main key), null값을 가질 수 없다.  동일한 값을 중복 저장 할 수 없다.
 대체키(Alternate Key) : 기본키를 제외한 나머지 후보키
 슈퍼키(Super Key) : 릴레이션 내에 있는 속성들의 집합으로 구성된 키
 외래키(Foreign Key) : 관계를 맺고 있는 릴레이션에서 학생릴레이션이 참조하고 있는 수강릴레이션의 기본키와 같은 학생 릴레이션의 속성을 외래키라 한다.

 

개체 무결성

- 릴레이션에서 기본키를 구성하는 속성은 Null 값이나 중복값을 가질 수 없다.

참조 무결성

- 외래키 값은 Null 이거나 참조 릴레이션 기본키 값과 동해야한다.

- 참조 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다.

유일성 : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 한다.
최소성 : 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성으로만 구성되어야 한다.
(NULL) : 알려지지 않거나 모르는 값, 해당 없음.

 

SQL - DDL : CREATE 

CREATE :  테이블, 뷰, 인덱스, 스키마 등을 생성

SQL - DDL : VIEW

VIEW : 사용자에게 접근이 허용된 자료만 보여주기 위해 하나 이상의 테이블에서 유도된 가상 테이블

- 물리적으로 존재하지않고 논리적으로 존재.

SQL - DDL : DROP

DROP : 테이블,뷰,인덱스,스키마 등을 삭제

- CASCADE : 참조하는 테이블도 모두 제거

- RESTRICT : 참조하는 테이이 있을 경우 제거하지 않음

SQL - DDL : ALTER

ALTER : 테이블,인덱스,스키마 등 구조변경

SQL - DML : SELECT

SELECT : 테이블에 존재하는 데이터에 대한 질의

 

 

SQL - DML : INSERT, UPDATE, DELETE

INSERT :  생성된 테이블에 데이터 입력

UPDATE : 테이블에 데이터 수정

DELETE : 테이블에 데이터 삭제

 

 


 

exit => root로 재접속

// 유저 생성 => root계정에서만 가능
mysql - uroot -pezen

// mysql이 user를 관리하는 테이블로 이동
use mysql;

// user 생성 구문
create user '유저아이디'@'localhost' identified by '비밀번호';
create user 'mysqlUser2'@'localhost' identified by 'mysql';

// 권한 부여
grant all privileges on testdb.* to 'mysqlUser2'@'localhost' with grant option;
 (select,insert,update)

// 권한 적용
flush privileges;

// 유저 확인
select user, host from user;

---------------------------------------------------------------------------

root 나와서  mysqlUser로 변경

table 생성

mysql 데이터 자료형

숫자

(정수)
- BIT(m) : 1~64 binary 값을 지정
- BOOL : TRUE(1) / FALSE(0) = TINYINT(1)
- TINYINT(m) : 0~255 사이의 작은 수를 표현 (-128~127)
- SMALLINT(m) :  2BYTE 0~65536 (-32768 ~ 32767)
- MEDIUMINT(m) : 3BYTE ( 0~166777215)
- INT(m) : 4BYTE => java int 동일 
- BIGINT : 8BYTE => java long 동일


(실수) =>
- FLOAT(m, d) : 정밀도가 작은 부동소수점 표현 (d : 자리수)
- DOUBLE (m, d) : 정밀도가 큰 부동소수점 표현 (d : 자리수)
=> mysql 8.0.17 이후부터 사용하지 않음


- DECIMAL(m,d) : 고정 소수점 표현


문자
- CHAR(m) : 고정길이 문자열(0~255)
- VARCHAR(m) : 가변길이 문자열 (0~65536)
- TINYTEXT : 가변길이 1BYTE 문자열 저장
- BLOB : 바이너리 데이터 저장용 ( 이미지 ) 
- TEXT : 2BYTE 가변길이 문자열
- MEDIUMTEXT : 3BYTE
- LONGTEXT : 4BYTE


날짜
- DATE : 날짜표현
- DATETIME : 날짜+시간 => 가장많이 씀
- TIMESTAMP : insert, update 연산에 유리한 형태
- YEAR : 연도만
- TIME : 시간만

제약조건
PK : PRIMARY KEY => 기본키 속성 추가
NN : Not Null (데이터 값으로 null을 오지 못하게 막음)
AI : Auto_Increment (자동증가 : 정수만 가능)
UQ : unique (중복안됨)
B : binary 값
UN : Unsigned (음수 불가)
ZF : Zero_Fill ( 숫자 앞에 0으로 채우기) ex) 0001
G : Generated ( 속성 자동생성 )

기본값 : 기본값을 주지않고 값이 없으면 null
defalut 값 

- null은 연산이 안됨.

주석 : 단축키 안됨.
/* 여러줄 주석 */ 
-- 한줄주석

-- 테이블 생성 구문
테이블명 : test1
속성 : 
- id int ai pk
- name varchar(10) not null
- age int default 20 (기본값 20)
- address varchar(20)

create table test1(
id int auto_increment,
name varchar(10) not null,
age int default 20,
address varchar(20),
primary key(id));

-- 테이블 확인
show tables;

-- 테이블 구조 확인
desc 테이블 명;
desc test1;

-- 데이터 추가 구문
insert into 테이블명(필드명, 필드명)
values(값, 값);

insert into test1(name, address)
values('hong','seoul');
insert into test1(name, address)
values('kim','suwon');
insert into test1(name, address)
values('lee','seoul');
insert into test1(name, address)
values('choi','suwon');
insert into test1(name, address)
values('park','incheon');

-- 내용확인

select * from test1;

-- 테이블 생성
테이블 명 :test2
속성
- 학번(num) 숫자 => 111 222 ...
- 이름(name) 문자
- 학과(dep) 문자
- 주소(addr) 문자
- 전화번호(tel) 문자


create table test2(
num int ,
name varchar(10) not null,
dep varchar(20),
addr varchar(20),
tel varchar(15),
primary key(num));


-- 데이터 추가 (5명) 추가

insert into test2
values(111,'kim','math','seoul','010-5001-6064');
insert into test2
values(222,'lee','kor','suwon','010-1111-2222');
insert into test2
values(333,'park','eng','seoul','010-1212-3434');
insert into test2
values(444,'choi','elec','incheon','010-9999-8888');
insert into test2
values(555,'jeong','com','suwon','010-7777-7777');


-- 테이블 구조 변경 
-age를 int로 추가 

alter table 테이블명 add(추가) 필드명 속성;
alter table 테이블명 change(수정) 필드명 변경필드명 속성;
-> alter table test2 change aag age int default 20;
add(추가), modify(수정), change(수정:이름변경가능), drop(삭제)
마지막에 추가
alter table test2 add age int default 20;
alter table test2 add age int default 20 after name;
특정 필드 뒤에 추가 (after)

- age를 name뒤로 위치 
alter table test2 modify age int default 20 after name;

-- 테이블 명 변경
- rename table 변경전 to 변경후


-- 데이터 변경
-- kim,pack 의 나이를 21로 변경
update 테이블명 set 변경필드 = 값
where 조건;

update test2
set age = 21
where name = 'kim' or 'pack';
where name in ('kim', 'pack');


update test2
set age = 22
where name = 'jeong';

-- test1 phone 추가 varchar(20)
-- 추가된 phone 값을 추가

alter table test1 add phone varchar(20);

update test1
set phone = '010-0000-0000'
where id = 1;
update test1
set phone = '010-1111-1111'
where id = 2;
update test1
set phone = '010-2222-2222'
where id = 3;
update test1
set phone = '010-3333-3333'
where id = 4;
update test1
set phone = '010-4444-4444'
where id = 5;

-- test1 테이블에서 address 가 seoul인 학생만 출력

select * from test1 where address = 'seoul';

select name,age,address,phone from test1
where address='seoul';


--------------------------------------------------------------------------------------

-- 테이블 생성

테이블 명 : student
num => 111,222 ... pk
name => nn
age => default 20
address => 주소
major => 학과

create table student(
num int ,
name varchar(10) not null,
age int default 20,
address varchar(20),
major varchar(20),
primary key(num));


5명의 데이터 추가

insert into student
values(111,'kim',20,'incheon','kor');
insert into student
values(222,'lee',20,'seoul','eng');
insert into student
values(333,'pack',20,'busan','math');
insert into student
values(444,'choi',20,'suwon','elec');
insert into student
values(555,'jeong',20,'incheon','com');

update student
set major = 'com'
where name = 'lee';

update student
set major = 'kor'
where name = 'pack';

update student
set address = 'seoul'
where name = 'choi';

-- student 테이블 변경
score default 0 속성추가

alter table student add score int default 0;

insert into student
values(666,'김현우',22,'seoul','kor',100);
insert into student
values(777,'이기연',21,'busan','elec',78);
insert into student
values(888,'박성민',20,'incheon','com',81);
insert into student
values(999,'최가을',24,'suwon','elec',67);
insert into student
values(1001,'정태웅',20,'suwon','kor',98);

update student
set score = 92
where num = 111;
update student
set score = 45
where num = 222;
update student
set score = 57
where num = 333;
update student
set score = 33
where num = 444;
update student
set score = 75
where num = 555;


-- score가 높은 사람 순으로 정렬
select * from student 
order by score desc;

-----------------------------------------------------------------------------

select : 데이터를 조회할 때 사용 
select 칼럼명 from 테이블명
where 조건 

------------------------------------------------------------------------------

-major 가 computer인 학생만 출력

select * from student
where major='com';

- 나이가 23이상인 학생만 검색

select * from student
where age>=23;


- 점수가 80점 이상인 학생만 검색

select * from student
where score >= 80;

- 주소가 seoul인 학생만 검색

select * from student
where address = 'seoul';

- 점수가 70점 미만인 학생만 검색

select * from student
where score < 70 ;

- 점수가 70~90 사이인 학생만 검색

select * from student
where score between 70 and 90;

- 주소가 'seoul' 'incheon'인 학생만검색

select * from student
where address in ('seoul','incheon');

- 김씨인 학생만 검색

select * from student
where name like '김%';

- 점수가 70~90 사이인 학생만 검색 점수가 높은 순으로

select * from student
where score between 70 and 90
order by score desc;

'DB 수업 정리' 카테고리의 다른 글

DB 5일차.  (3) 2024.09.02
DB 4일차  (0) 2024.08.30
DB 3일차  (2) 2024.08.29
DB 2일차  (0) 2024.08.28
mysql 설치 & 설정  (0) 2024.08.26