데이터베이스 핵심개체(객체)
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 테이블명;
혼자공부하는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 |