반응형

@혼자 공부하는 SQL

혼자공부하는 SQL 6주차 학습인증 및 미션완료

 

 

 

이번주를 마지막으로 혼자공부하는 SQL 교재를 가지고 

6주간의 온라인 스터디를 마치게 되었으며, 

6주동안 한권의 책을 정독하게 되었습니다.

 

 

 

@혼자 공부하는 SQL 학습일정

 

 

6주동안 학습을 하면서 SQL에 대한 모든것을 알수는 없었지만, 

SQL 을 필요한 곳에 사용할수 있을 정도가 된거 같고, 

아마도 대부분 SQL 학습하시는 분들이 프로그래밍 할때 MySQL을 활용하실듯 한데, 

저도 마찬가지로 파이썬, 자바등 프로그램에서 연결해서 사용할 정도는 익숙하게 된거 같습니다.

 

 

이번주에 학습한 부부은 교재에서 챕터 7에 

SQL 프로그래밍이라고 할수 있는 스토어드프로시저(Stored Procedure)와 

자동으로 실해되는 트리거(Trigger)에 대해서와, 

챕터 8에 파이썬 프로그램을 작성하고 MySQL에 연결하여, 

데이터를 입력하고 수정, 삭제등 하는 방법에 대해서 학습을 하며, 

혼자공부하는 SQL 교재를 이용한 SQL 학습을 마무리 하였습니다.

 

 

 

 

 

 

 

 

혼자 공부하는 SQL 6주차 미션 입니다.

 

기본미션: p.363 - market_db의 고객 테이블(member)에 입력된 회원의 정보가 변경될 때 변경한 사용자,

시간, 변경 전의 데이터 등을 기록하는 트리거 작성하고 인증샷

 

 

@혼자 공부하는 SQL

 

 

USE market_db;
CREATE TABLE singer (SELECT mem_id, mem_name, mem_number, addr FROM member);

CREATE TABLE backup_singer 
( mem_id		CHAR(8) NOT NULL, 
  mem_name 		VARCHAR(10) NOT NULL, 
  mem_number	INT NOT NULL, 
  addr			CHAR(2) NOT NULL, 
  modType		CHAR(2), 		-- 변경된 타입. '수정' 또는 '삭제'
  modDate		DATE,			-- 변경된 날짜
  modUser		VARCHAR(30)		-- 변경한 사용자
);

DROP TRIGGER IF EXISTS singer_updateTrg;
DELIMITER $$
CREATE TRIGGER singer_updateTrg		-- 트리거 이름
	AFTER UPDATE		-- 변경 후에 작동하도록 지정
    ON singer			-- 트리거를 부착할 테이블
    FOR EACH ROW 
BEGIN
	INSERT INTO backup_singer VALUES( OLD.mem_id, OLD.mem_name, OLD.mem_number, OLD.addr, '수정', CURDATE(), CURRENT_USER() );
END $$
DELIMITER ;

DROP TRIGGER IF EXISTS singer_deleteTrg;
DELIMITER $$
CREATE TRIGGER singer_deleteTrg		-- 트리거 이름
	AFTER DELETE			-- 삭제 후에 작동하도록 지정
    ON singer				-- 트리거를 부착할 테이블
    FOR EACH ROW
BEGIN
	INSERT INTO backup_singer VALUES( OLD.mem_id, OLD.mem_name, OLD.mem_number, OLD.addr, '삭제', CURDATE(), CURRENT_USER() );
END $$
DELIMITER ;

UPDATE singer SET addr = '영국' WHERE mem_id = 'BLK';
DELETE FROM singer WHERE mem_number > 7;

SELECT * FROM backup_singer;

 

 

 

기본미션: p.402 - GUI 응용 프로그램 만들고 인증샷

 

 

@파이썬 MySQL 연동 프로그램 실행 결과

실행환 화면이며 교재에서와 같이 hon(혼공이) 사용자 정보를 입력하고, 

입력 버튼을 눌러서 추가를 한후, 조회 버튼을 눌러 결과 값을 출력한 화면 입니다.

 

 

 

@Visual Studio 파이썬 프로그래밍

코딩은 파이썬 IDLE Shell에서 하지 않고,

visual studio 에서 하였습니다.

 

 

import pymysql
from tkinter import *
from tkinter import messagebox

## 메인 코드부
def insertData() :
    con, cur = None, None
    data1, data2, data3, data4 = "", "", "", ""
    sql=""

    conn = pymysql.connect(host='127.0.0.1', user='root', password='0000', db='soloDB', charset='utf8')
    cur = conn.cursor()

    data1 = edt1.get(); data2 = edt2.get()
    data3 = edt3.get(); data4 = edt4.get()
    sql = "INSERT INTO userTable VALUES('" + data1 + "', '" + data2 + "','" + data3 + "'," + data4 + ")"
    cur.execute(sql)
    
    conn.commit()
    conn.close()
    
    messagebox.showinfo('성공', '데이터 입력 성공')

def selectData() :
    strData1, strData2, strData3, strData4 = [], [], [], []

    conn = pymysql.connect(host='127.0.0.1', user='root', password='0000', db='soloDB', charset='utf8')
    cur = conn.cursor()
    cur.execute("SELECT * FROM userTable")

    strData1.append("사용자 ID");       strData2.append("사용자 이름")
    strData3.append("사용자 이메일");   strData4.append("사용자 출생연도")
    strData1.append("----------");      strData2.append("----------")
    strData3.append("----------");      strData4.append("----------")

    while (True) :
        row = cur.fetchone()
        if row== None :
            break;
        strData1.append(row[0]);    strData2.append(row[1])
        strData3.append(row[2]);    strData4.append(row[3])
    
    listData1.delete(0, listData1.size() -1)
    listData2.delete(0, listData2.size() -1)
    listData3.delete(0, listData3.size() -1)
    listData4.delete(0, listData4.size() -1)

    for item1, item2, item3, item4 in zip(strData1, strData2, strData3, strData4) :
        listData1.insert(END, item1);   listData2.insert(END, item2)
        listData3.insert(END, item3);   listData4.insert(END, item4)
    
    conn.close()

## 메인 코드부
root = Tk()
root.geometry("600x300")
root.title("완전한 GUI 응용 프로그램")

edtFrame = Frame(root)
edtFrame.pack()
listFrame = Frame(root)
listFrame.pack(side = BOTTOM, fill=BOTH, expand=1)

edt1= Entry(edtFrame, width=10);    edt1.pack(side=LEFT, padx=10, pady=10)
edt2= Entry(edtFrame, width=10);    edt2.pack(side=LEFT, padx=10, pady=10)
edt3= Entry(edtFrame, width=10);    edt3.pack(side=LEFT, padx=10, pady=10)
edt4= Entry(edtFrame, width=10);    edt4.pack(side=LEFT, padx=10, pady=10)

btnInsert = Button(edtFrame, text="입력", command = insertData)
btnInsert.pack(side=LEFT, padx=10, pady=10)
btnSelect = Button(edtFrame, text="조회", command = selectData)
btnSelect.pack(side=LEFT, padx=10, pady=10)

listData1 = Listbox(listFrame, bg = 'yellow');
listData1.pack(side=LEFT, fill=BOTH, expand=1)
listData2 = Listbox(listFrame, bg = 'yellow')
listData2.pack(side=LEFT, fill=BOTH, expand=1)
listData3 = Listbox(listFrame, bg = 'yellow')
listData3.pack(side=LEFT, fill=BOTH, expand=1)
listData4 = Listbox(listFrame, bg = 'yellow')
listData4.pack(side=LEFT, fill=BOTH, expand=1)

root.mainloop

 

 

반응형

+ Recent posts