標籤:declare 變數 display 刪除 執行預存程序 過程 視圖 com size
視圖
視圖是一個虛擬表(非真實存在),其本質是【根據SQL語句擷取動態資料集,並為其命名】,使用者使用時只需使用【名稱】即可擷取結果集,並可以將其當作表來使用。
每次調用時才運行相關語句
1.建立視圖
--格式:CREATE VIEW 視圖名稱 AS SQL語句CREATE VIEW v1 AS SELET nid, nameFROM AWHERE nid > 4
2.刪除視圖
--格式:DROP VIEW 視圖名稱DROP VIEW v1
View Code
3.修改視圖
-- 格式:ALTER VIEW 視圖名稱 AS SQL語句ALTER VIEW v1 ASSELET A.nid, B. NAMEFROM ALEFT JOIN B ON A.id = B.nidLEFT JOIN C ON A.id = C.nidWHERE A.id > 2AND C.nid < 5
View Code
4.使用視圖
使用視圖時,將其當作表進行操作即可,由於視圖是虛擬表,所以無法使用其對真實表進行建立、更新和刪除操作,僅能做查詢用。
select * from v1
View Code
預存程序
預存程序是一個SQL語句集合,當主動去調用預存程序時,其中內部的SQL語句會按照邏輯執行
1.建立
-- 建立預存程序delimiter // 把運行符號由;修改為//create procedure p1()BEGIN select * from t1;END//delimiter ;-- 執行預存程序call p1()無參數預存程序
View Code
對於預存程序,可以接收參數,其參數有三類:
- in 僅用於傳入參數用
- out 僅用於傳回值用
- inout 既可以傳入又可以當作傳回值
-- 建立預存程序delimiter \create procedure p1( in i1 int, in i2 int, inout i3 int, out r1 int -- 若傳入的r1有值,也無視這個值)BEGIN DECLARE temp1 int; DECLARE temp2 int default 0; set temp1 = 1; set r1 = i1 + i2 + temp1 + temp2; set i3 = i3 + 100;end\delimiter ;-- 執行預存程序set @t1 =4; -- 設定使用者變數用@set @t2 = 0;CALL p1 (1, 2 ,@t1, @t2);SELECT @t1,@t2; 有參數的預存程序
帶參數時
2.刪除
drop procedure proc_name;
View Code
3.執行
-- 無參數call proc_name()-- 有參數,全incall proc_name(1,2)-- 有參數,有in,out,inoutset @t1=0;set @t2=3;call proc_name(1,2,@t1,@t2)執行預存程序
執行預存程序
#!/usr/bin/env python# -*- coding:utf-8 -*-import pymysqlconn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 執行預存程序cursor.callproc(‘p1‘, args=(1, 22, 3, 4))# 擷取執行完儲存的參數cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3")# 固定用法 @_過程名_第幾個變數result = cursor.fetchall()conn.commit()cursor.close()conn.close()print(result)pymysql執行預存程序pymysql執行預存程序
Mysql(二)