데이터베이스 - 용어정리

지환·2023년 8월 14일
0

Mysql

목록 보기
1/17
post-thumbnail

출처 | https://www.youtube.com/watch?v=UVY0mfa4VP0&list=PLqTUMsvO70nk8WfCyU-IPmc85390CaSqM&index=1

https://cafe.naver.com/thisisMySQL
https://velog.io/@ong_hh/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%B6%95

데이터베이스 모델링과 필수용어

  • 데이터베이스 모델링이란 현실세계에서 사용되는 데이터를 Mysql에 어떻게 옮겨 놓을 것인가를 결정하는 것이다.

  • PK(Primary Key) : null값이면 안 되고, 중복이면 안 된다.
  • 행 : 데이터의 건 수
  • 열 : 이름, 각각의 열에는 데이터 형식이 지정
  • 테이블 : 데이터베이스 안에 존재(DBMS안에 있는게 아님)
  • 데이터베이스 : 테이블이 저장되는 저장소, 데이터의 저장소
  • DBMS : 데이터베이스를 관리하는 소프트웨어
  • SQL : DBMS와 사람이 소통하게 해주는 언어

데이터베이스 구축 절차

What we make

쇼핑몰 데이테베이스 만들기

테이블 만들기

위를 코드로 치면👇

CREATE TABLE `shopdb`.`membertbl` (
  `memberID` CHAR(8) NOT NULL,
  `memberName` CHAR(5) NOT NULL,
  `memberAddress` CHAR(20) NULL,
  PRIMARY KEY (`memberID`));

데이터 입력하기

위를 코드로 치면👇

INSERT INTO `shopdb`.`membertbl` (`memberID`, `memberName`, `memberAddress`) VALUES ('Dnag', '당탕이', '경기도 부천시 중동');
INSERT INTO `shopdb`.`membertbl` (`memberID`, `memberName`, `memberAddress`) VALUES ('Jee', '지훈이', '서울 은평구 증산도');
INSERT INTO `shopdb`.`membertbl` (`memberID`, `memberName`, `memberAddress`) VALUES ('Han', '한주연', '인천 남구 주안동 ');
INSERT INTO `shopdb`.`membertbl` (`memberID`, `memberName`, `memberAddress`) VALUES ('Sang', '상팔이', '경기 성남시 분당구');

데이터/데이터베이스 사용

shopdb를 더블클릭하고 글씨가 굵어지면 "shodb를 사용하겠다" 라는 것
SELECT * FROM memberTBL; 은 memberTBL의 모든 열을 보겠다는 것

실행하고자 하는 줄을 드래그 해서 번개표시 누르기, 전체 실행하면 꼬일 수 있음

인덱스(Index)

인덱스란 대부분의 책의 제일 뒤에 붙어 있는 '찾아보기' 와 같은 개념이다.
인덱스는 테이블의 열 단위에 생성된다. (열을 기본 키로 설정하면 자동으로 인덱스가 생성됨)

인덱스 X

'mary'를 처음부터 끝까지 다 찾아봤음.

인덱스 O

인덱스 만들기

CREATE INDEX idx_indexTBL_firstname ON indexTBL(first_name);

실행

SELECT * FROM indexTBL WHERE first_name = 'Mary';

을 다시 드래그 해서 번개모양 눌러준다.
결과값은 바뀌지 않는다.

뷰(View)

가상의 테이블(테이블처럼 보이지만 테이블은 아니다.) 테이블에 링크된 개념

EXAMPLE
아르바이트생에게 테이블 전체 내용을 공개할 순 없을 때, 테이블의 몇 가지 정보만 뽑아서 뷰를 생성한다. 뷰는 실제로 있는 것이 아니라, 회원 테이블의 링크 개념이므로 실제 데이터는 회원 테이블에만 존재하기 때문에 데이터의 중복이 발생되지 않는다. 또한, 아르바이트생은 뷰에만 접근 권한을 줘서 회원들의 중요한 정보는 아예 볼 수 없다. 만약 아르바이트생을 위한 테이블을 또 만들게 된다면 동일한 데이터가 두 테이블에 존재하게 되어 데이터의 중복이 발생한다.

뷰 만들기

CREATE VIEW uv_memberTBL
AS
	SELECT memberName, memberAddress FROM memberTBL;

뷰 확인하기

SELECT * FROM uv_memberTBL;

스토어드 프로시저(Stored Procedure)

MySQL에서 제공해주는 프로그래밍 기능
즉, SQL문을 하나로 묶어서 편리하게 사용하는 기능.
실무에서는 SQL문(주로 SELECT)을 매번 하나하나 수행하기 보다는 스토어드 프로시저로 만들어 놓은 후에 스토어드 프로시저를 호출하는 방식을 많이 사용한다.

가정

SELECT * FROM memberTBL WHERE memberName = '당탕이';
SELECT * FROM productTBL WHERE productNAME = '냉장고';

위 두 select문을 매우 자주 사용한다고 가정하자,

만들기

DELIMITER //
CREATE PROCEDURE myProc()
BEGIN
	SELECT * FROM memberTBL WHERE memberName = '당탕이';
	SELECT * FROM productTBL WHERE productNAME = '냉장고';
END //
DELIMITER ;

DELIMITER
DELIMITER는 직역하면 '구문 문자'로 'C'나 'JAVA'의 ';'(세미콜론)이라고 생각하면 된다.
즉, 문법의 끝을 나타내는 역할을 한다.
BEGIN과 END사이에 세미콜론을 사용했기 때문에 DELIMITER를 설정하지 않으면 문장을 구분하기가 어려워진다. 또한 구문 문자를 또 세미콜론으로 지정하는 것도 문장을 구분하기 어렵게 하므로 세미콜론이 아닌 //로 설정한 것이다. 마지막에 DELIMITER 명령어를 다시 사용한 이유는 다시 세미콜론을 이용하여 문장을 구분하기 위해서다.

실행

CALL myProc();

트리거(Trigger)

다른 테이블에 부착되어서 테이블에 INSERT나 UPDATE 또는 DELETE 작업이 발생되면 실행되는 코드

EXAMPLE
'당탕이'라는 학생이 자퇴를 하려고 한다. 학생 테이블에서 삭제를 하면 '당탕이'의 정보가 삭제되긴 하지만 '당탕이'가 자퇴생인지 아닌지도 모르게 된다. 따라서 '당탕이'를 학생테이블에서는 삭제하고 자퇴생테이블에 자동으로 추가시키는 것

자동으로 추가시킬 테이블 만들기

CREATE TABLE deleteMemberTBL (
    memberID char(8),
    memberName char(5),
    memberAddress char(20),
    deleteDate date -- 삭제한 날짜
);

트리거 생성

DELIMITER //
CREATE TRIGGER trg_deleteMemberTBL -- 트리거 이름
    AFTER DELETE -- 삭제 후에 작동하게 지정
    ON memberTBL -- 트리거를 부착할 테이블
    FOR EACH ROW -- 각 행마다 적용시킴
BEGIN
	-- OLD 테이블의 내용을 백업테이블에 삽입
    INSERT INTO deleteMemberTBL
		VALUES (OLD.memberID, OLD.memberName, OLD.memberAddress, CURDATE() );
END //
DELIMITER ;

확인

DELETE FROM memberTBL WHERE memberName = '당탕이' ;
SELECT * FROM memberTBL;

SELECT * FROM deleteMemberTBL;

profile
아는만큼보인다.

0개의 댓글