Mysql(二)

來源:互聯網
上載者:User

標籤:style   虛擬   weight   127.0.0.1   for   聲明變數   動態   out   .exe   

視圖

視圖是虛擬表,使用者只有在使用視圖時,才會根據sql語句去擷取資料集。

視圖可以直接當做資料表來使用,但不是真正意義的表。

視圖只能在查詢時用,無法對真實的表進行增刪改操作。

1.建立視圖

格式:

CREATE VIEW 視圖名稱 AS SQL語句

2.修改視圖

格式:

ALTER VIEW 視圖名稱 AS SQL語句

3.刪除視圖

格式:

DROP VIEW 視圖名稱

4.使用視圖

SELECT * FROM 視圖名稱
預存程序

預存程序相當於程式語言中的函數,可以傳入參數,也可以有傳回值。當使用者主動調用預存程序時,預存程序中定義的sql語句將按照邏輯執行。

1.建立預存程序

預存程序可接收的參數有三類:

in:用於傳入參數

out:用於傳回值

inout:既可以傳入參數又可以傳回值

無參數預存程序:

 1 -- 建立預存程序 2  3 delimiter //      # delimiter用於修改SQL語句預設終止符 4 create procedure p1() 5 BEGIN 6     select * from t1; 7 END// 8 delimiter ;      # 將SQL語句終止符改回預設 9 10 11 12 -- 執行預存程序13 14 call p1()       # 調用預存程序

帶參數預存程序:

 1 -- 建立預存程序 2 delimiter \ 3 create procedure p1( 4     in i1 int,    # i1,i2用於接收傳入的參數 5     in i2 int, 6     inout i3 int, 7     out r1 int    # r1傳入任何值,預設都為null 8 ) 9 BEGIN10     DECLARE temp1 int;      # declare聲明變數類型11     DECLARE temp2 int default 0;  # 聲明變數類型,並賦予預設值12     13     set temp1 = 1;14 15     set r1 = i1 + i2 + temp1 + temp2;16     17     set i3 = i3 + 100;18 19 end\20 delimiter ;21 22 -- 執行預存程序23 set @t1 =4;24 set @t2 = 0;25 CALL p1 (1, 2 ,@t1, @t2);  26 SELECT @t1,@t2;

2.刪除預存程序

DROP PROCEDURE 預存程序名稱

3.執行預存程序

 1 -- 無參數 2 call proc_name() 3  4 -- 有參數,全in 5 call proc_name(1,2) 6  7 -- 有參數,有in,out,inout 8 set @t1=0; 9 set @t2=3;10 call proc_name(1,2,@t1,@t2)

4.pymysql執行預存程序

import pymysqlconn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘,charset=‘utf8‘)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 執行預存程序cursor.callproc(‘p1‘, args=(1, 22, 3, 4))ret=cursor.fetchall()  # 擷取資料集print(ret)# 擷取執行完儲存的參數cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3")result = cursor.fetchall()  # 擷取執行完預存程序的參數的值conn.commit()cursor.close()conn.close()print(result)
觸發器

對某個表進行 增刪改 操作前/操作後,如果希望出發其它行為,可以使用觸發器來完成。

1.建立觸發器

格式:

插入前觸發與插入後觸發:

CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROWBEGIN    ...END
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROWBEGIN    ...END

刪除和修改時觸發同上,如:delete on..  ,  update on..

例如:

NEW表示即將插入的資料行,OLD表示即將刪除的資料行。

delimiter //CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROWBEGIN    IF NEW. num = 666 THEN        INSERT INTO tb2 (NAME)        VALUES            (‘666‘),            (‘666‘) ;    ELSEIF NEW. num = 555 THEN        INSERT INTO tb2 (NAME)        VALUES            (‘555‘),            (‘555‘) ;    END IF;END//delimiter ;

2.刪除觸發器

DROP 觸發器名稱;

3.使用觸發器

觸發器無法由使用者直接調用,而知由於對錶的【增/刪/改】操作被動引發的。當刪除整個表時,每刪除一條資料,則觸發一次。

insert into tb1(num) values(666)


 

動態執行sql語句

Mysql(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.