데이터베이스 핵심개체(객체)

1. 인덱스 : 조회속도 빠르게 해줌 (책의 인덱스역)

2. 뷰 : 제한적표현시 사용.

3. 스토어드 프로시저 : SQL에서 프로그래밍 가능하게 해줌

4. 트리거 : 잘못된데이터 못들어가게 사전방지.

 

 

 

공통 데이터베이스의 개체의 생성 및 삭제 ( 테이블, 인덱스, 뷰, 스토어드 프로시저 등)

생성 : create 개체종류, 개체이름

삭제 : drop 개체종류, 개체이름


 

1. 인덱스

create index 인덱스이름 

on 테이블명(컬럼명);

 

 

인덱스 사용전에는 전체에서 검색 했다. (select * from member where member_name='아이유';)

 

인덱스를 적용하고나서 검색시 (select * from member where member_name='아이유'; )

속도가빨라짐. 현재는 개수가 몇개되지않아 큰차이가 나지 않지만, 데이터의 수가 수백만건이라면 차이발생.


2. 뷰

: 가상의테이블, 제한적표현사용 (진짜테이블에 링크된 개념,  윈도우의 바로가기만들기 개념)

 

create view 뷰이름

as select * from member;               //as sql원본문

 

 

바로가기 ? 뷰로 만든 걸로 조회해도 결과 잘나오는데? 시간은 동일하게걸린다.

select * from member_view; 

그러면 이거 왜쓰지 의문이 좀들었다.

이거왜쓰는거니~!?

이유.

1. 보안에 도움이된다.

2. 긴 SQL문을 간략하게 만들수있다.

 


3. 스토어드 프로시저

스토어드 프로시저 : MySQL에서 제공하는 프로그래밍 기능

                                 여러개의 SQL문을 하나로 묶어 사용가능

                                 연산식, 조건문, 반복문 등 사용가능

 

delimiter //
create procedure 프로시저명()
begin
select * from member where member_name = '아이유';         //예시 sql문1
select * from product where product_name = '삼각김밥';        //예시 sql문2
end //
delimiter ;

 

 

 

 

sql1, 2 문을 프로시저로 묶고 call 프로시저명or call 프로시저명() 로 사용가능하다.

 

 


 

 

PK, FK 지정 ( ERD 기호 )

 

 

데이터베이스 만들기

drop database if exists maket_db;

crate database market_db;

 

기존  maket_db가 잇다면 지우고,  maket_db이름으로 데이터베이스 만들어라.

DROP DATABASE IF EXISTS market_db; -- 만약 market_db가 존재하면 우선 삭제한다.
CREATE DATABASE market_db;

USE market_db;
CREATE TABLE member -- 회원 테이블
( mem_id  		CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
  mem_name    	VARCHAR(10) NOT NULL, -- 이름
  mem_number    INT NOT NULL,  -- 인원수
  addr	  		CHAR(2) NOT NULL, -- 지역(경기,서울,경남 식으로 2글자만입력)
  phone1		CHAR(3), -- 연락처의 국번(02, 031, 055 등)
  phone2		CHAR(8), -- 연락처의 나머지 전화번호(하이픈제외)
  height    	SMALLINT,  -- 평균 키
  debut_date	DATE  -- 데뷔 일자
);
CREATE TABLE buy -- 구매 테이블
(  num 		INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(PK)
   mem_id  	CHAR(8) NOT NULL, -- 아이디(FK)
   prod_name 	CHAR(6) NOT NULL, --  제품이름
   group_name 	CHAR(4)  , -- 분류
   price     	INT  NOT NULL, -- 가격
   amount    	SMALLINT  NOT NULL, -- 수량
   FOREIGN KEY (mem_id) REFERENCES member(mem_id)
);

 

 

MySQL 워크벤치 output 문구

 

 

 

 

 

관계연산자 : >, <, >=, <=, =   (숫자인경우)

논리연산자 : and, or 

 

 

between A and B  ( 숫자인경우 )

 

 

in ( 문자인경우 )

 

like ( 문자인경우 )   

 

_ 언더바 조건

 

 

서브쿼리 ( select안에 또다른 select 사용 )

 


 

order by 

//기본 오름차순(asc) , desc  내림차순

 

 

Limit (출력개수제한)

 

select 출력할열 or *
from 조회할테이블
order by 정렬할열 asc
limit 0, 3           ( start 번째 ~ end번째까지만)

 

 

중복결과제거 DIstinct

select 뒤에 붙여준다.

 

 

 

 

 

Group by ( 지정한 열의 데이터들을 같은 데이터끼리 묶어서 결과출력)

  ㄴ having 은 group by 의 조건

 

집계함수

sum() : 합계

avg() : 평균

min() : 최소값

max() : 최대값

count() : 개수

count(distinct) : 개수(중복된건 1개만인정)

 

 

select 출력할열, sum(합계하여 출력할열)
from 조회할테이블
group by 그룹으로 묵을열
order by 정렬기준열

 

 

having절

 having절은 꼭 group by절다음에 와야하며, 집계함수의 조건을 거는 것.

select mem_id, sum(price*amount)
from buy
group by mem_id
having sum(price*amount) > 1000

 


 

auto_increment 

auto_increment를 사용할 열은 꼭 primary key  ( PK ) 로 지정 해줘야 한다.

insert시 auto_increment열은 null로 입력해주면된다.

auto_increment 현재값 확인? _________________________________________select last_insert_id();

auto_increment를 150부터 시작하고 싶다면?__________ alther table hongong2 auto_increment=150;

auto_increment를 500부터 시작하여, 2씩 증가시키고 싶다면 ? _______ set @@auto_increment_increment = 2;

   alter table hongong2 auto_increment=500;
   set @@auto_increment_increment = 2;  

     이경우 시스템변수를 변경시켜야함.

    시스템 변수를 확인하고 싶다면, select @@시스템변수 로 확인가능,

    전체 시스템변수를 조회하고 싶다면, show global variables

 

 

insert 시 한번에 여러개 입력

기존

insert into ( ... ) 

insert into ( ... ) 

...

한번에 여러개

insert into 테이블 values ( 열내용1, 열내용2, 열내용3), (열내용1, 열내용2, 열내용3);

열개수와 동일하게 입력해야함


1번테이블의 데이터를 원하는것만 추출하여,   2번테이블에 data 넣기

insert into ~ select

    insert into 2번테이블명
                   select 원하는열1, 원하는열2
                    from 1번테이블명;

 


워크벤치에서 update를 확인하기위해서는 하기작업필요

Update ( 수정 )

update 테이블명
    set 열이름 = '값'   // 셋팅할 내용             , 열이름2 = 값2 로 여러개를 세팅할수도있다
    where 열이름 = '값';  // 찾을 조건

 

Delete ( 삭제 )

delete from 테이블명 where 조건

 

테이블 삭제

   drop table 테이블명

 

테이블 내 데이터 모두삭제

   truncate table 테이블명

 

테이블 구조확인

 desc 테이블명;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

market_db.sql
0.00MB

혼자공부하는MySQL 도서참조 ( 도서예제파일첨부 ) 

 

'Mysql' 카테고리의 다른 글

MySQL 설치  (0) 2023.03.21
MySQL 공부하자_명령어모음  (0) 2023.01.24
MySQL 기본1(조회,수정,삭제,등록)  (0) 2023.01.23
MySQL 명령문 (2) 제약조건  (0) 2023.01.22
MySql 명령문  (0) 2023.01.20

+ Recent posts