day43의 파이썬 기반 콘텐츠 노트

Day61

검토 :
SQL 문 :
데이터 라인 :
임시 테이블 (ID TB SELECT * FROM > 10)
: 매핑을 지정
SELECT ID, 이름 ,. 1, SUM (X) / COUNT ()
상태 :
케이스 때 ID> 8 다음 xx이며 다른 사람을. XX 종료

(ISNULL은 (XX) 경우 : 삼원 연산자 0,1)
첨가 :
약 심지어 표 : 가입
상하 테이블을 접속 : 연합
# 자동 가공
SELECT ID로부터 이름 TB1
연합
SELECT NUM, TB2의 행 SNAME

하지 # 무게
SID 선택 (SELECT), 학생에서 SNAME
UNION ALL
은 SELECT SID에서 SNAME 학생
섹션 운동 :
사용자 권한 관리를 기반으로
참조 테이블 구조 :

사용자 정보
위에서 언급 한 ID 사용자 이름 PWD
한 알렉스 123123

권한
1 개 주문 관리
사용자 증권
3 버그 관리
....

사용자 유형 및 권리
1 1
1 2
2 1
3 1
프로그램 :
사용자 로그인


역할 기반 권한 관리

사용자 정보
위에서 언급 한 ID 사용자 이름 PWD ROLE_ID
1 알렉스 123123 1
2 1 에릭 123123

권한
1 주문 관리
사용자 증권
3 버그 관리
....

역할 테이블 :
1 개 IT 부서 직원
이 명 상담 직원
3 IT 디렉터의

역할 권한
1 1
1 2
3 1
3 2
3 3

===>
1. 역할 기반 권한 관리
2. 요구 사항 분석

오늘날의 내용 :
1.보기
100 SQL :
88 : V1

은 SELECT ...에서 V1
에서 SELECT ASD v1의
미래에서 사용의 용이성에 대한 별명을 설정 쿼리

- 생성
AS보기 SQL보기 이름 생성

PS를 : 가상
- 수정
로보기 SQL 뷰 이름을 변경

, 삭제 -
드롭보기보기 이름을,

2. 트리거를

할 때 특정 테이블을 수행하는 방법 : CRUD 작업이 트리거와 연관된 비헤이비어를 사용자 정의하는 데 사용할 수있을 때

INSERT INTO TB (...을)

- DELIMITER / /
- 각 행에 대해 학생에 삽입하기 전에 트리거 (T1)을 만들
BEGIN -
- (TNAME) 값 교사로 (NEW.sname)를 삽입;
- 교사 (TNAME) 값으로 INSERT (NEW.sname);
- 교사 (TNAME) 값으로 INSERT (NEW.sname);
- 교사 (TNAME) 값으로 INSERT (NEW.sname);
- END //
- 구분자;
-

- 학생 (성별, CLASS_ID, SNAME) 값 ( 'F', 1 '타오') ( 'F', 1 '겐')에 삽입;

- NEW, 그 새로운 데이터를 대신하여
- 그 이전 데이터 대신에 OLD,

3. 함수
DEF F1 (A1, A2)
A1 + A2 반환

F1 ()
빈 ()

내장 함수 :
함수 CURDATE SELECT () 실행;

블로그
ID의 타이틀 ctime이이
. 1 자위대 2019-11
2 자위대 2019-11
3 자위대 2019-10.
2019-10 자위대. 4


ctime이, COUNT. (1) ctime이 블로그 그룹에서을 선택하면

DATE_FORMAT 그룹 블로그합니다 (ctime이 "% Y- %의 m")에서 DATE_FORMAT합니다 (ctime이 "% Y- %의 m"), COUNT. (1)을 선택
2,019 2 -11
2019-10 2


사용자 정의 기능 (반환 값) :

DELIMITER는 \\
기능 F1 (작성
I1의 INT,
I2의 int)를
반환 int로
BEGIN
DECLARE NUM의 INT 기본 0;
SET NUM = I1 + I2,
리턴 (NUM);
단 \\
DELIMITER 단계;

F1은 SELECT (1100)

4. 저장 프로 시저
는 MySQL => 요리 SQL 문에 저장 별명

) 별명 (

SQL 대안 작성하는 프로그래머를위한


실시 예 :
MySQL의 : 저장 프로 시저
: 저장 프로 시저 호출
: 두 번째 방법은
MySQL의 :. .
프로그램 : SQL 문
세 가지 방법 :
MySQL을 :. .
절차 : 클래스와 객체 (SQL 문)


1. 간단한
절차 P1을 (만들기)
선두
학생에서 SELECT *;
삽입 INTO 교사 (TNAME) 값 ( "CT");
최종

통화 P1 ()
cursor.callproc ( 'P1')
2 . 파라미터 (OUT, INOUT에서)
DELIMITER가 //
(절차 P2 작성
, INT하여 N1
N2에서의 INT
)
선두

SELECT * SID 학생> N1에서,
끝 //
DELIMITER;

P2 (12,2)을 호출
((12,2) 'P2')를 cursor.callproc

아웃 3.参数을
분리 //
(절차 P3 생성
N1 INT에서,
N2의 입출력을 INT
)
BEGIN
123123 = N2 설정;
학생에서 *를 선택할 경우 SID> (N1);
END //
구분자;

세트의 @ V1 = 10;
P2 (12, @에 V1)를 호출
V1 @ 선택;

@ _p3_0 = 12을 설정
@ _p3_1 = 2 SER
호 P3 (p3_0 @ _ @ _ p3_1)
, 선택의 _p3_0 @ _ @ p3_1




cursor.callproc ( 'P3', (12,2))
R1 = cursor.fetchall ()
인쇄 (R1)


cursor.execute ( '@의 _p3_0, @ _ p3_1 선택')
R2 = cursor.fetchall ()
(R2)를 인쇄

=======> 특별
. 송신 매개 변수 일 수있다 : INOUT OUT에서의
B의 pymysql.

Cursor.callproc ( 'P3', (12,2))
R1 = cursor.fetchall ()
인쇄 (R1)

cursor.execute ( '는 SELECT @의 _p3_0, @ _ P3_1')는
R2 = cursor.fetchall ()
인쇄 (R2)

왜 제시된 결과는 반환 값을 위조했다?


// DELIMITER
(절차 P3 생성
N1의 INT에서
1,2-를 식별하기위한 프로 시저를 OUT N2 INT 실행 결과를
)
선두
VV INSERT INTO (..)을
(..) VV INSERT INTO
(..) VV INTO INSERT
INTO INSERT VV (..)
(..) VV INTO INSERT
VV INTO INSERT (..)
최종 //
DELIMITER;

4. 거래


DELIMITER //
작성 절차 P4 (
OUT INT 상태
)
선두
명령문이 비정상적으로 실행되는 경우 1. {
SET 상태 . 1 =;
ROLLBACK;
}

트랜잭션을 시작
- 치 계정 100에서 뺀
Fangshao 웨이 90 플러스 계정 -
-张根账户加10
커밋
结束

세트 상태 = 2;


END //
구분자;

===============================
구분 기호 \\
절차의 P5를 작성 (
OUT p_return_code TINYINT
)
BEGIN
되는 SQLException가 DECLARE 출구 핸들러
BEGIN
- - 에러
세트 p_return_code = 1;
롤백;
종료;

트랜잭션을 시작;
TB1에서 삭제;
TB2에 삽입 (이름) 값 ( '일곱');
범하다;

- SUCCESS의
세트 p_return_code = 2;

END \\
구분;


5.游标

구분 //
생성 절차 P6 ()
시작
선언 ROW_ID의 INT를; -自定义变量1 개
선언 ROW_NUM의 INT; -自定义变量2
INT DEFAULT의 FALSE 수행 선언;
임시 INT를 선언;

A로부터 선택 아이디, 납입위한 my_cursor 커서를 선언;
수행 찾을 수 없음 SET = TRUE위한 핸들러를 계속 선포



열린 my_cursor;
xxoo : LOOP는
가져 my_cursor ROW_ID로, ROW_NUM;
하는 경우에 다음
xxoo을 떠나;
END IF;
설정 온도 + = ROW_ID ROW_NUM;
B 삽입 (수)의 값 (온도);
단부 루프 xxoo;
가까운 my_cursor;


// 끝
delimter을;

6.动态执行SQL (防SQL注入)

구분 기호 //
(프로 시저 P7을 만들
에서 TPL VARCHAR (255)
의 Arg의 INT의
)
선두
1. 사전 정당성 뭔가 SQL 문을 감지
2. SQL = +의 Arg가 TPL 포맷
3. SQL 문을 실행

SET @xo =의 Arg;
로부터 XXX 'SELECT *에서 준비 를 Where SID 학생> ';?
사용 @xo XXX EXECUTE;
DEALLOCATE는 생산성을 준비,
끝 //
delimter,



전화 P7 ( "? 위에서 ID를 언급 한 곳에서 SELECT * TB>", 9)

===>

DELIMITER는 \\
듀어 P8을 CREATE (
에 INT NID
)
BEGIN
SET NID = @nid,
찌르다 PREPARE에서 'SELECT * WHERE SID 학생>에서?';
대한 EXECUTE 생산성 @nid 사용,
DEALLOCATE는 생산성을 준비,
최종 \\
DELIMITER를,


데이터베이스 관련 작업을 :
1. SQL 문 *****
- XX에서 SELECT XX ();
2. MySQL이 제공하는 내부 기능의 사용

운영 :
A,은 SQL 질문 *****는

두 번째로, 데이터베이스
테이블 : 이메일 성별에 ID 이름
alex1는
삼백 만 라인은

미리보기 :
5. 인덱스

6. ORM 작업 SQLAlchmy이
- 데이터 클래스 객체에서 작동















추천

출처www.cnblogs.com/wang-tan/p/11588319.html