- 설치파일 다운로드 하기(링크)
- 오라클 사이트에 처음 접속하는 경우 아래와 같은 창이 뜨는데 모든쿠키수락을 클릭하면 된다.

- MySQL Installer for Windows를 클릭



- 설치파일 실행 후 설치 진행(이후 과정을 상세히 보려면 아래 더보기 버튼 클릭)
- root 계정 설정 및 사용자 계정 설정

- 사용자 계정 추가 과정을 상세히 보려면 아래 더보기 버튼 클릭
- root 계정으로 서버 연결 테스트


릴레이션의 모든 속성이 원자 값을 가진다.
릴레이션에서 속성의 값은 속성의 도메인에 속하는 단일 값이어야 한다는 제약을 의미한다.
| 학번 | 이름 | 학과 |
| ---------- | ------ | -------------------------- |
| 2019100100 | 홍길동 | {컴퓨터공학과, 전기공학과} |
| 2019100051 | 임꺽정 | 컴퓨터공학과 |
| 2019155015 | 논개 | 전기공학과 |
학생은 복수 전공을 통해 최대 두 학과에 소속될 수 있기 때문에 학과 속성은 다치값을 갖는다.
이 릴레이션을 제1정규형으로 만드는 방법은 2가지가 있다.
| 학번 | 이름 | 학과 |
| ---------- | ------ | ------------ |
| 2019100100 | 홍길동 | 컴퓨터공학과 |
| 2019100100 | 홍길동 | 전기공학과 |
| 2019100051 | 임꺽정 | 컴퓨터공학과 |
| 2019155015 | 논개 | 전기공학과 |
| 학번 | 이름 |
| ---------- | ------ |
| 2019100100 | 홍길동 |
| 2019100051 | 임꺽정 |
| 2019155015 | 논개 |
| 학번 | 학과 |
| ---------- | ------------ |
| 2019100100 | 컴퓨터공학과 |
| 2019100100 | 전기공학과 |
| 2019100051 | 컴퓨터공학과 |
| 2019155015 | 전기공학과 |
완전 함수 종속성 개념에 기반을 둔다.
아래 예시 릴레이션은 공급자번호+부품번호가 기본키이다.
부품 공급 릴레이션
| 공급자번호 | 부품번호 | 운송거리 | 소재지 | 수량 |
| ---------- | -------- | -------- | ------ | ---- |
| S1 | P1 | 46 | 수원 | 300 |
| S1 | P2 | 46 | 수원 | 200 |
| S1 | P3 | 46 | 수원 | 400 |
| S1 | P4 | 46 | 수원 | 200 |
| S1 | P5 | 46 | 수원 | 100 |
| S1 | P6 | 46 | 수원 | 100 |
| S2 | P1 | 164 | 대전 | 300 |
| S2 | P2 | 164 | 대전 | 400 |
| S3 | P2 | 302 | 대구 | 200 |
| S4 | P2 | 329 | 광주 | 200 |
| S4 | P4 | 329 | 광주 | 300 |
| S4 | P6 | 329 | 광주 | 400 |
삽입이상
삭제이상
갱신이상
INSERT, UPDATE, DELETE의 경우에 트리거 지원
MySQL은 각 테이블에 각 형태의 다양한 트리거를 허용한다.
문법(참고 : MySQL)
DELIMITER //
CREATE
[DEFINER = user]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
BEGIN
trigger_body
END //
/*
trigger_time: { BEFORE | AFTER }
trigger_event: { INSERT | UPDATE | DELETE }
trigger_order: { FOLLOWS | PRECEDES } other_trigger_name
*/
DELIMITER ;
class 테이블 : 강의 테이블로 강의번호, 강의명, 총 수강생 수를 가지고 있다.
CREATE TABLE `class` (
`no` int(11) NOT NULL,
`name` varchar(45) DEFAULT NULL,
`total` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
course 테이블 : 수강 테이블로 수강번호, 강의번호, 학생번호를 가지고 있으며 강의번호를 외래키로 지정하였다.
CREATE TABLE `course` (
`no` int(11) NOT NULL,
`class_no` int(11) NOT NULL,
`student_no` int(11) NOT NULL,
KEY `class_no_idx` (`no`),
CONSTRAINT `class_no` FOREIGN KEY (`no`) REFERENCES `class` (`no`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8
input_course 트리거 : 학생이 수강에 등록되면 해당 강의번호의 총 수강생 수가 증가해야 하기 때문에 이를 트리거로 생성하였다.
use green;
DROP TRIGGER IF EXISTS input_course;
DELIMITER //
CREATE TRIGGER input_course AFTER INSERT ON course
FOR EACH ROW
BEGIN
declare _total int default 0;
set _total = (select count(*) from course where new.class_no = class_no);
update
class
set
total = _total
where
no = new.class_no;
END//
DELIMITER ;
show triggers;
insert into class(no,name,total) values(1,'컴퓨터공학',0);
insert into course(no,class_no,student_no) values(1, 1, 2019160135);
SELECT * FROM green.class;
class 테이블에 total에 1이 입력된 것을 확인 할 수 있다.