혼공S 6주차 미션

sujinzzang수진짱·2024년 2월 12일
0

hongongSQL

목록 보기
6/6

7장 스토어드 프로시저

07-1 스토어드 프로시저 사용방법

  • 스토어드프로시저: SQL 문과 프로그래밍 기능이 합쳐진 것

스토어드프로시저 만들기

  • DELIMETER $$ ~ BEGIN ~ END $$ DELIMETER '
  • 스토어드 프로시저를 만드는 것과 실행하는 것은 다르다

스토어드프로시저 실행하기

  • CALL

매개변수의 사용

  • 입력 매개변수: 프로시저에 어떤 값을 전달하는 것
  • 출력 매개변수: 프로시저를 통해 받은 값

07-2 스토어드 함수와 커서

스토어드함수

  • 스토어드 프로시저와 비슷
  • SUM(), CAST(), CONCAT(), DATE() 등과 같이 사용자가 직접 함수를 만드는 것
  • CALL로 호출하지 않고, SELECT를 통해 호출한다

커서

  • 테이블에서 한 행씩 처리하기 위한 방식

07-3 자동 실행되는 트리거

트리거

  • INSERT, UPDATE, DELETE가 발생되면 실행되는 코드
  • 이벤트가 발생할 때 트리거가 실행된다

8장. sql과 파이썬 연결

08-1 파이썬 개발 환경 준비

  • 파이썬에 PyMySQL을 장착할 수 있다.

08-2 파이썬과 MySQL 연동하기

  • 파이썬 따로 설치안하고 주피터노트북 이용해서 연동 및 테이블에 데이터 입력

  • input으로 값 받기

import pymysql

# 전역변수 선언부
conn, 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()

while (True):
    data1 = input('사용자 ID ===>')
    if data1 == "":
        break;
    data2 = input('사용자 이름 ===>')
    data3 = input('사용자 이메일 ===>')
    data4 = input('사용자 출생연도 ===>')
    sql = f"INSERT INTO userTable VALUES('{data1}', '{data2}', '{data3}', '{data4}')"
    cur.execute(sql)
    
conn.commit()
conn.close()
  • 확인

  • 파이썬에서 조회까지 하기

import pymysql

# 전역변수 선언부
conn, 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()

cur.execute("SELECT * FROM userTable")

print('사용자 ID  사용자이름  이메일  출생연도')
print('---------------------------------------------')

while (True):
    row = cur.fetchone()
    if row == None:
        break
    data1 = row[0]
    data2 = row[1]
    data3 = row[2]
    data4 = row[3]
    print(f'{data1} {data2} {data3} {data4}')

conn.close()

08-3 GUI 응용 프로그램

GUI

  • GUI: 윈도에 그래픽 환경으로 제공되는 화면
  • thinter 라이브러리: 윈도우창을 만들어주는 라이브러리

기본미션

p. 363 market_db의 고객 테이블(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) -- 변경한 사용자
);

수정 트리거 만들기

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 ;

삭제 트리거 만들기

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';
SELECT * FROM backup_singer;

삭제트리거 실행하기

DELETE FROM singer WHERE mem_number >= 7;
SELECT * FROM backup_singer;

선택미션

p. 402 GUI 응용 프로그램 만들고 인증하기

오와우 GUI는 코드 복붙하기는 했지만 엄청 신기하당


색깔 바꿔봄~~ㅋㅋㅋ

0개의 댓글