6주차 미션!!
1. 기본미션
p. 363 market_db의 고객 테이블(member)에 입력된 회원의 정보가 변경될 때 변경한 사용자, 시간, 변경 전의 데이터 등을 기록하는 트리거 작성하고 인증하기
실행코드
USE market_db;
CREATE TABLE IF NOT EXISTS trigger_table (id INT, txt VARCHAR(10));
INSERT INTO trigger_table VALUES(1, '레드벨벳');
INSERT INTO trigger_table VALUES(2, '잇지');
INSERT INTO trigger_table VALUES(3, '블랙핑크');
DROP TRIGGER IF EXISTS myTrigger;
DELIMITER $$
CREATE TRIGGER myTrigger -- 트리거 이름
AFTER DELETE -- 삭제후에 작동하도록 지정
ON trigger_table -- 트리거를 부착할 테이블
FOR EACH ROW -- 각 행마다 적용시킴
BEGIN
SET @msg = '가수 그룹이 삭제됨' ; -- 트리거 실행시 작동되는 코드들
END $$
DELIMITER ;
SET @msg = '';
INSERT INTO trigger_table VALUES(4, '마마무');
SELECT @msg;
UPDATE trigger_table SET txt = '블핑' WHERE id = 3;
SELECT @msg;
DELETE FROM trigger_table WHERE id = 4;
SELECT @msg;
USE market_db;
CREATE TABLE singer (SELECT mem_id, mem_name, mem_number, addr FROM member);
DROP TABLE IF EXISTS backup_singer;
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;
TRUNCATE TABLE singer;
SELECT * FROM backup_singer;
결과
2. 선택미션
p. 402 GUI 응용 프로그램 만들고 인증하기
실행코드
from tkinter import *
import pymysql as pm
from tkinter import messagebox
def insertData():
conn, cur = None, None
userId, userName, userEmail, userBirthYear = "", "", "", ""
sql = ""
conn = pm.connect(host='127.0.0.1', user='root', password='0123456789**', db='soloDB', charset='utf8')
cur = conn.cursor()
userId = inputId.get()
userName = inputName.get()
userEmail = inputEmail.get()
userBirthYear = inputBirthYear.get()
sql = "insert into userTable values('" + userId + "','" + userName + "','" + userEmail + "','" + userBirthYear + "')"
cur.execute(sql)
conn.commit()
conn.close()
messagebox.showinfo('성공', '데이터 입력 성공')
def selectData():
userId, userName, userEmail, userBirthYear = [], [], [], []
conn = pm.connect(host='127.0.0.1', user='root', password='1189', db='solodb', charset='utf8')
cur = conn.cursor()
cur.execute("select * from userTable")
userId.append("사용자 ID")
userId.append("----------")
userName.append("사용자 이름")
userName.append("----------")
userEmail.append("사용자 이메일")
userEmail.append("----------")
userBirthYear.append("사용자 출생연도")
userBirthYear.append("----------")
while True:
row = cur.fetchone()
if row is None:
break
userId.append(row[0])
userName.append(row[1])
userEmail.append(row[2])
userBirthYear.append(row[3])
userIdList.delete(0, userIdList.size() - 1)
userNameList.delete(0, userNameList.size() - 1)
userEmailList.delete(0, userEmailList.size() - 1)
userBirthYearList.delete(0, userBirthYearList.size() - 1)
for i1, i2, i3, i4 in zip(userId, userName, userEmail, userBirthYear) :
userIdList.insert(END, i1)
userNameList.insert(END, i2)
userEmailList.insert(END, i3)
userBirthYearList.insert(END, i4)
conn.close()
root = Tk()
root.title("mysql 데이터 연동 프로그램")
root.geometry("600x300")
edtFrame = Frame(root)
edtFrame.pack()
listFrame = Frame(root)
listFrame.pack(side=BOTTOM, fill=BOTH, expand=1)
inputId = Entry(edtFrame, width=10)
inputId.pack(side=LEFT, padx=10, pady=10)
inputName = Entry(edtFrame, width=10)
inputName.pack(side=LEFT, padx=10, pady=10)
inputEmail = Entry(edtFrame, width=10)
inputEmail.pack(side=LEFT, padx=10, pady=10)
inputBirthYear = Entry(edtFrame, width=10)
inputBirthYear.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)
userIdList = Listbox(listFrame, bg='yellow')
userNameList = Listbox(listFrame, bg='yellow')
userEmailList = Listbox(listFrame, bg='yellow')
userBirthYearList = Listbox(listFrame, bg='yellow')
userIdList.pack(side=LEFT, fill=BOTH, expand=1)
userNameList.pack(side=LEFT, fill=BOTH, expand=1)
userEmailList.pack(side=LEFT, fill=BOTH, expand=1)
userBirthYearList.pack(side=LEFT, fill=BOTH, expand=1)
root.mainloop()
결과
3. 필기
[Sql] Chapter 07. 스토어드 프로시저 — 노 코딩 노 라이프 (tistory.com)