개발/SQL 10

[MySQL] 트리거

트리거란? 테이블에 DML문(INSERT, UPDATE, DELETE)의 이벤트가 발생하면 실행되는 코드이다. 예를 들어 특정 테이블에 DELETE문이 수행되면 자동으로 다른 곳에 데이터를 INSERT 해주도록 설정해두는 것이 대표정인 용도이다. 트리거 생성 DROP TRIGGER IF EXISTS myTrigger; DELIMITER $$ CREATE TRIGGER myTrigger -- 트리거 이름 AFTER DELETE -- 삭제후에 작동하도록 지정 ON trigger_table -- 트리거를 부착할 테이블 FOR EACH ROW -- 각 행마다 적용시킴 BEGIN SET @msg = '가수 그룹이 삭제됨' ; -- 트리거 실행시 작동되는 코드들 END $$ DELIMITER ; 위와 같이 트리거를..

개발/SQL 2022.10.02

[MySQL] 뷰(VIEW)

뷰(View) 란? 뷰는 데이터베이스 개체 중 하나로, 테이블처럼 데이터를 가지고 있지는 않지만 SELECT 문으로 만들어져 있기 때문에 뷰에 접근하면 SELECT가 실행되고 그 결과를 볼 수 있다. 쉽게 '가상의 테이블'이라고 표현할 수 있다. 뷰를 사용하는 이유 뷰를 만들면 테이블과 동일하게 접근이 가능한데 굳이 뷰를 사용하는 이유 중 하나는 보안이라고 말할 수 있다. 개인정보 등 중요한 정보를 제외하고 뷰를 만들면 접근하는 데이터에 권한을 제한할 수 있다. 또한, 복잡하고 자주 사용하는 SELECT 쿼리를 뷰로 만들어두면 보다 간결한 쿼리를 작성할 수 있다. 뷰 생성 CREATE VIEW v_memberbuy AS SELECT B.mem_id, M.mem_name, B.prod_name, M.add..

개발/SQL 2022.10.02

[MySQL] INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN

JOIN이란 두 개의 테이블을 묶어서 하나의 결과로 보여주는 것을 말한다. 두 테이블의 조인을 위해서는 테이블이 일대다 관계로 연결되어야 한다. 예를 들면, 어느 쇼핑몰의 회원은 유니크한 아이디를 갖는다. 그 회원은 상품 구매는 여러번 할 수 있어서 구매 이력은 여러개를 갖는다. 따라서 쇼핑몰의 회원별 구매 이력은 회원 테이블과 구매이력을 조인하여 보여줄 수 있다. 내부 조인 (INNER JOIN) 내부 조인의 경우 값이 있는 데이터를 조인하여 보여준다. 내부 조인의 형식은 다음과 같다. INNER JOIN의 경우 그냥 JOIN이라고만 써도 INNER JOIN이라고 인식한다. SELECT 열 목록 FROM 테이블1 INNER JOIN 테이블2 ON 조인 조건 WHERE 검색 조건 예제 USE market..

개발/SQL 2022.09.20

[MySQL] 데이터 형식(정수형, 문자형, 실수형, 날짜형)

1. 데이터 형식 데이터 형식을 잘 활용하면 데이터베이스를 더 효율적으로 구성할 수 있다. 정수형 정수형의 크기와 범위는 다음과 같다. 데이터 형식 바이트 수 숫자 범위 TINYINT 1 -128 ~ 127 SMALLINT 2 -32,768 ~ 32,767 INT 3 약 -21억 ~ 21억 BIGINT 4 약 -900경 ~ 900경 UNSIGNED 예약어를 사용하면 범위가 0부터 시작되어 양수로 더 넓은 범위의 수를 사용할 수 있다. 예를 들면, TINYINT는 -128 ~ 127까지 표현할 수 있는 데이터 형식인데, UNSIGNED TINYINT의 경우 0 ~ 255까지 사용할 수 있다. 문자형 CHAR는 길이가 고정되어있는 문자형으로, CHAR(10) 과 같이 사용할 수 있다. 처음부터 길이가 10으..

개발/SQL 2022.09.19

[MySQL] AUTO_INCREMENT 사용하기

MySQL에서는 AUTO_INCREMENT를 사용하여 테이블의 기본 키로 활용할 수 있다. 키에 의미 있는 값이 필요하지 않으면서 키 관리가 필요할 경우에 유용하게 사용할 수 있다. 기본키에 AUTO_INCREMENT 옵션을 주면 INSERT 시 1부터 시작하여 자동으로 값이 증가된다. INSERT문을 실행할 때에는 해당 컬럼에 별도로 값을 지정하지 않아도 된다. use market_db; CREATE TABLE tbl_autoincrement_test ( test_id INT AUTO_INCREMENT PRIMARY KEY, test_name CHAR(4), test_etc CHAR(20) ); INSERT INTO tbl_autoincrement_test VALUES (NULL, '홍길동', '기본 ..

개발/SQL 2022.09.19

[MySQL] 데이터 조회 (ORDER BY, DISTINCT, GROUP BY, LIMIT)

데이터 조회 시 결과를 정렬할 때에는 ORDER BY, 중복을 제거할 경우 DISTINCT, 묶어서 보여줘야 하는 경우에는 GROUP BY, 일부만 보여줘야 할 때에는 LIMIT을 사용할 수 있다. 기본적으로 사용 순서는 아래와 같다. SELECT 컬럼명 FROM 테이블병 WHERE 조건식 GROUP BY 컬럼명 HAVING 그룹의 조건 ORDER BY 컬럼명 LIMIT 결과 개수 1. ORDER BY ORDER BY 뒤에는 정렬 기준이 되는 컬럼명을 써주면 된다. 기본적으로 정렬은 오름차순(ASC)으로 정렬이 되며, 내림차순은 DESC라고 명시해주면 된다. 예시 use market_db; -- mem_name 컬럼 기준으로 오름차순 정렬 SELECT * FROM member ORDER BY mem_na..

개발/SQL 2022.09.19

[MySQL] 데이터 조회 (LIKE)

데이터 조회 시 부분적으로 일치하는 값을 찾을때 LIKE를 사용한다. 예시 use market_db; -- '핑크'로 끝나는 멤버 찾기 select * from member where mem_name like '%핑크'; -- '블랙'으로 시작하는 멤버 찾기 select * from member where mem_name like '블랙%'; -- '랙핑크'로 끝나며 앞에 한 글자만 더 있는 멤버 찾기 select * from member where mem_name like '_랙핑크'; -- '블랙핑'으로 시작하며 뒤에 한 글자만 더 있는 멤버 찾기 select * from member where mem_name like '블랙핑_';

개발/SQL 2022.09.19

[MySQL] MySQL Workbench로 인덱스, 뷰, 스토어드 프로시저 만들기

1. 인덱스 테이블에 데이터가 많아질수록 조회할 때 시간이 많이 소요되는데, 인덱스를 설정할 경우 빠르게 조회할 수 있다. 인덱스를 설정하지 않을 경우 아래와 같이 Full Table Scan을 하게 된다. 인덱스는 CREATE INDEX 인덱스명 ON 테이블명(컬럼명) 으로 생성한다. CREATE INDEX idx_member_name ON member(member_name); idx_member_name이라는 인덱스가 잘 생성된 것을 확인할 수 있다. 생성 후에 인덱스 생성 전에 실행했던 조회 쿼리를 다시 실행해보면 Plan이 변경된 것을 확인할 수 있다. 2. 뷰 뷰는 실제로 있는 테이블이 아닌 하나 이상의 테이블의 데이터를 선택하여 가상으로 정의한 것이다. 뷰는 CREATE VIEW 뷰명 AS S..

개발/SQL 2022.09.19

[MySQL] MySQL Workbench로 데이터베이스 만들기

MySQL Workbench를 실행하고 좌측 Navigator 우클릭 후 Create Schema(혹은 상단 바의 아이콘)을 클릭한다. 1. 데이터베이스(스키마) 만들기 이름을 입력하고 Apply를 누른다. 스키마명은 영어 대소문자 모두 사용 가능하나, 대문자로 입력해도 시스템 내부에 소문자로 변환되어 저장되므로 소문자로 입력하면 된다. Apply를 누르면 위와 같은 창이 뜨는데, CREATE SCHEMA ~~ 라고 써있는 DDL을 직접 실행시켜서 만들어도 동일하게 스키마를 만들 수 있다. CREATE SCHEMA `shop_db`; 생성 완료 후 Navigator에서 새로 생성한 스키마를 확인할 수 있다. 2. 테이블 만들기 테이블을 만들 데이터베이스 > Tables를 우클릭 하고 Create Tabl..

개발/SQL 2022.09.19

DBMS란

DBMS(Database Management System)란? 데이터베이스(데이터의 집합)를 관리하고 운영하는 소프트웨어. Excel에도 많은 데이터를 저장하고 관리할 수 있지만, DBMS는 대용량의 데이터를 관리하거나 여러 사용자와 공유(동시에 접근 가능)한다는 점에서 차이가 있다. 소프트웨어 종류로는 MySQL, 오라클, SQL 서버, MariaDB 등이 있다. DBMS의 분류 DBMS의 유형은 계층형(Hierarchical), 망형(Network), 관계형(Relational), 객체지향형(Object-Oriented), 객체관계형(Object-Relational) 등으로 나눌 수 있다. 관계형 DBMS가 많은 부분을 차지하며, MySQL도 관계형 DBMS이다. RDBMS의 데이터베이스는 테이블이라..

개발/SQL 2022.09.05