MySQL - 01

이강민·2022년 4월 11일
0

웹 개발반 - MySQL

목록 보기
1/6
post-thumbnail

MySQL - 01

데이터베이스란??

  • DB(DataBase)
    • 데이터들의 집합소(저장소)
  • DBMS
    • DataBase Management System
    • 데이터 베이스를 관리하는 시스템(오라클, MySQL, 마리아DB...)
  • 행(Row, 레코드, 튜플,..)
    • 하나의 대상에 대한 데이터 (ex. 현대, 아반떼, 흰색, 3000)
  • 열(Column, 속성, 필드..)
    • 공통된 값들의 주제(ex. 현대, 기아)
  • Primary Key(PK)
    • 각 데이터들의 고유한 값(각 데이터들의 구별점 역할)
    • 중복이 없고 비어있지 않음
    • 위 그림에서는 중복될 수 있는 값들만 있다. 따라서 id나 code 같은 별도의 값으로 pk를 만들어도 된다.
  • RDMBS
    • Relational DataBase Management System
    • 관계형 데이터베이스 관리 시스템
    • 테이블끼리 서로 관계를 맺고 있는 데이터데베이스 관리 시스템
  • Foreign Key(FK)
    • 외래키
    • 테이블끼리 관계를 맺을 때 받아오는 다른 테이블의 키
  • MySQL
    • 세계에서 가장 많이 쓰이는 오픈 소스의 RDBMS이다.
    • 다양한 운영체제에 다양한 언어로 활용이 가능하다.
    • 표준 SQL 형식을 사용한다.

SQL문

  • Structured Query Language

  • 인터프린터 언언

  • 한 줄씩 번역되고 빈번한 수정이 있을 때 효과적이다.

  • 번역과 동시에 바로 실행된다.(번역 파일이 존재하지 않는다.)

  • DDL(Data Definition Language)

    • 데이터 정의어
    • 테이블에 관련된 쿼리문
    • create : 테이블 생성
      drop : 테이블 삭제
      alter : 테이블 수정
  • DML(Data Mainpulation Language)

  • DCL(Data Control Language)

  • TCL(Transaction Control Language)

자료형

  • 숫자
    • int : 정수
      decimal(n,m) : n(전체자리수), m(소수점 자리수)
      ex) decimal(4,2) -> - 99.99 ~ 99.99
  • 문자열
    • char(n) : n바이트의 문자열(고정형), 빈 자리는 그대로 남겨둔다.
      ex) char(4) -> [   ] --> :"A"를 넣으면 [A   ]
    • varchar(n) : n바이트의 문자열(가변형), 빈 자리는 할당 해제
      ex) char(4) -> [    ] --> :"A"를 넣으면 [A]
    • enum(값1, 값2, 값3...) : 해당하는 값들만 들어올 수 있는 자료형 설정
      ex) enum('m','w') : 'm' 또는 'w'만 들어올 수 있음
  • 시간
    • date : 한 순간의 날짜를 저장하는 타입
    • datetime : 한 순간의 날짜와 시간을 저장하는 타입

실습

데이터베이스 생성, 삭제, 사용

create database 데이터베이스명;

create database PMS;

drop database PMS;

use PMS;

테이블 생성, 수정, 삭제

# 생성
create table Car(
	brand varchar(300),
    color varchar(300),
    price int
);

#수정
#테이블 명 바꾸기 
alter table Car rename to CAR;

#컬럼 추가
alter table CAR add(caridx int primary key);

#컬럼 수정
alter table CAR modify caridx bigint;

#컬럼명 수정
alter table CAR change caridx carid int;

#컬럼 삭제
alter table CAR drop price;

foreign key 적용하기
먼저 2개의 테이블을 생성해보자

#부모테이블
create table owner(
	id varchar(300) primary key,
	name varchar(300),
    phone varchar(300),
    age int, 
    addr varchar(1000)
);

#자식테이블 
create table Car(
	carnum varchar(300) primary key,
    brand varchar(300),
    color varchar(300),
    price int,
    id varchar(300),
);

어떤 자동차가 누구의 소유주인지 알려면 자동차에 소유주를 구분할 수 있어야 한다.
따라서 소유주를 나타내는 고유 식별번호를 자동차의 고유식별 번호에 foreign key를 참조하여 넣게 되면 car테이블의 고유 식별 번호를 이용하면 소유주 테이블에 접근 할 수 있다.

#자식테이블 
create table Car(
	carnum varchar(300) primary key,
    brand varchar(300),
    color varchar(300),
    price int,
    id varchar(300),
    constraint car_owner_fk foreign key(id) references owner(id)
);

이러한 테이블 간의 관계는 부모-자식 테이블의 관계라고 하며 이러한 확장성으로 관계형 데이터베이스라고 한다.
참고적으로 데이터를 수정하려면 자식을 먼저 수정해야 참조오류를 발생하지 않는다.

데이터베이스 만들어보기

  • 모델링
    • 추상적인 주제를 DB에 맞게 설계하는 것
  • 요구분석
    • 수강신청프로그램
      수강을 신청하려면 그 주체인 학생정보가 필요하고 학생이 신청하는 과목 정보가 필요하다. 또한 수강을 신청하고 시간이 겹치는지 볼 수 있는 시간표가 필요하겠다.
  • 개념적 설계
    학생정보과 과목정보를 구성하는 데이터의 내용을 생각하고 테이블의 연관성을 생각하면서 필요한 정보를 추가한다.
학생정보 		시간표			과목정보			리스트
-------------------------------------------------------
학번				수업코드		   	과목코드			수업코드
학생명			과목코드			과목명			학번
소속학과			정원				학과	
학년				강의실
핸드폰번호		수업시간
				담당교수
  • 논리적 설계
    학생정보에서는 학번은 중복되면 안된다.
    과목정보도 과목코드가 겹치면 안된다. 해당 리스트를 보여주는 수업코드도 마찬가지이다. 해당 정보를 시간표에서 과목코드는 과목정보의 fk로 참조하여 어떤 과목인지 알아야 한다.
학생정보 		시간표			과목정보			리스트
-------------------------------------------------------
학번(pk)		 	수업코드(pk)	   	과목코드(pk)		수업코드(pk)
학생명			과목코드(fk)		과목명			학번
소속학과			정원				학과	
학년				강의실
핸드폰번호		수업시간
				담당교수
  • 물리적 설계
create table student(
	student_number int primary key,
	name varchar(300),
    major varchar(300),
    glade int,
    phonenumber int
);

create table subject_info(
	subjectcode int primary key,
    name varchar(300),
    major varchar(300)
);

create table timetable(
	classcode int primary key,
    subjectcode int,
    professor varchar(300),
     personnel int, 
    classroom varchar(300),
    classtime varchar(300),
    constraint timetable_subject_fk foreign key(subjectcode) references subject_info(subjectcode)
);


create table study_list(
	classcode int primary key,
	student_number int,
    constraint study_list_timetable_fk foreign key(classcode) references timetable(classcode),
    constraint study_list_student_fk foreign key(student_number) references student(student_number)
);
profile
AllTimeDevelop

0개의 댓글

관련 채용 정보