정보시스템 구축 단계
- 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수
- 분석단계에선 시스템 분속 또는 요구사항 분석으로 현재 우리가 '무엇을' 할 것인지 결정, 중요한 단계
- 설계는 주로 시스템 설계 또는 프로그램 설계로, 우리가 구축하고자 하는 시스템을 '어떻게' 할 것인지 결정
- 분석과 설계의 과정이 전체 공정이 50% 이상을 차지한다고 볼 정도로 중요하다.
데이터베이스 구축 절차
- 데이터베이스 생성 -> 테이블 생성 -> 데이터 입력 -> 데이터 조희/활용
-------- 책 '이것이 MySQL이다' 3장 일부를 명령어만으로 'MariaDB'에서 시도해봄 --------
# 데이터베이스 생성
# '쇼핑몰'(ShopDB) 데이터베이스 생성, 테이블 생성
create schema shopdb;
use shopdb;
# create table shopdb.memberTshopdbBL ( ... );
create table memberTBL(
memberID char(8) not null,
memberName char(5) not null,
memberAddress char(20)
);
create table productTBL(
productName char(4) not null,
cost int not null,
makeDate date,
company char(5),
amount int not null
);
show tables;
desc memberTBL;
desc productTBL;
create table `my testTBL`(id int); # 띄어쓰기가 들어간 이름을 사용하려면 ` 백틱키를 이용
drop table `my testTBL`;
-- 이 부호는 주석 달 때 사용 --
/* 블록 주석
이 안에 입력하는 내용들도 모두 주석
*/
# 행 데이터 입력
insert into memberTBL(memberID, memberName, memberAddress) values
('Dang', '당탕이', '경기 부천시 중동'),
('Jee', '지운이', '서울 은평구 증산동'),
('Han', '한주연', '인천 남구 주안동'),
('Sang', '상길이', '경기 성남시 분당구');
select * from memberTBL;
insert into productTBL(productName, cost, makeDate, company, amount) values
('컴퓨터', 10, '2017-01-01', '삼성', 17),
('세탁기', 20, '2018-09-01', 'LG', 3),
('냉장고', 5, '2019-02-01', '대우', 22);
select * from productTBL;
# view 뷰 사용법
create view uv_memberTBL
as
select memberName, memberAddress from memberTBL;
-- 뷰의 실체는 select문이다.
select * from uv_memberTBL;
# stored procedure 스토어드 프로시저 : SQL문을 하나로 묶어서 편리하게 사용하는 기능
-- 회원 테이블 '당탕이'의 정보와 제품 테이블의 '냉장고'의 정보를 동시에 조회 --
select * from memberTBL where memberName = '당탕이';
select * from productTBL where productName = '냉장고';
-- 두 쿼리를 하나의 스토어드 프로시저로 만들기 --
delimiter //
create procedure myProc()
begin
select * from memberTBL where memberName = '당탕이';
select * from productTBL where productName = '냉장고';
end //
delimiter ;
# 만들어둔 스토어드 프로시저 실행 : call 스토어드프로시저이름()
call myProc() ;
# trigger 트리거
-- 테이블에 부착되어 테이블에 insert, update, delete 작업이 발생되면 실행되는 코드
-- 데이터 삭제 후엔 그 데이터에 대해 알 수 없기 때문에 삭제 전 다른 곳에 복사해두면 되는데
-- 매번 수작업으로 할 경우 깜박 잊을 수 있으므로 '자동으로' 해주는 기능
-- -> trigger의 대표적 용도
insert into memberTBL values ('Figure', '연아', '경기도 군포시 당정동');
select * from memberTBL;
update memberTBL set memberAddress = '서울 강남구 역삼동' where memberName = '연아';
select * from memberTBL;
delete from memberTBL where memberName = '연아';
select * from memberTBL;
-- 이 경우엔 '연아'가 회원이었다는 사실을 증명할 방법이 없음. 기록 없음.
-- 다른 테이블에 지워진 데이터와 더불어 지워진 날짜까지 기록하기
create table deletedMemberTBL (
memberID char(8),
memberName char(5),
memberAddress char(20),
deletedDate date -- 삭제한 날짜
); # 지워진 데이터를 보관할 테이블
delimiter //
create trigger trg_deletedMemberTBL -- 트리거 이름
after delete -- 삭제 후에 작동하게 지정
on memberTBL -- 트리거를 부착할 테이블
for each row -- 각 행마다 적용
begin
-- old 테이블의 내용을 백업 테이블에 삽입
insert into deletedMemberTBL
values(old.memberID, old.memberName, old.memberAddress, curdate() );
end //
delimiter ;
-- 트리거 작동 확인해보기
select * from memberTBL;
delete from memberTBL where memberName = '당탕이';
select * from memberTBL;
select * from deletedMemberTBL;
--------------------------------------------------------------------------------------
사용한 기본 명령어 정리
# create schema 데이터베이스_이름 ;
# create table 테이블_이름(칼럼들 입력) ;
# create view 뷰_이름 as select 특정칼럼, 특정칼럼2, ... from 테이블_이름 ;
# drop schema 데이터베이스_이름 ;
# drop table 테이블_이름 ;
# use 데이터베이스_이름 ;
# show tables ; show databases ;
# desc 테이블이름 ; = describe 테이블이름 ;
# insert into 테이블_이름(칼럼 콤마로 구분하여 순서대로 입력)
values (넣을 데이터 콤마로 구분하여 순서대로 입력), ( ), ( ), ... ;
# select * from 테이블_이름 (where ~) ;
# update 테이블_이름 set 특정칼럼 = 새로 넣을 데이터 where ~ ;
# delete from 테이블_이름 (where ~) ;
# 주석 : '-- '로 한줄 주석, '/* 내용 */'로 블럭(여러줄) 주석
* SQL은 일반적으로 대소문자 구분 X,
but 전체 대문자 또는 소문자로 통일하는 것이 구문을 일기 쉽게 하고 DBMS의 성능에도 약간 도움이 된다
'SQL' 카테고리의 다른 글
SQL 02. DML 기본 명령어 (0) | 2019.09.27 |
---|---|
SQL 01. DDL 기본 명령어 (0) | 2019.09.27 |
SQL의 분류 : DML / DDL / DCL / TCL (0) | 2019.09.26 |
SQL 설치 (0) | 2019.09.26 |
SQL과 NoSQL (0) | 2019.09.25 |
댓글