1. 程式人生 > >Python/MySQL(四、MySQL數據庫操作)

Python/MySQL(四、MySQL數據庫操作)

lba done cas exceptio cal pytho llb create _id

Python/MySQL(四、MySQL數據庫操作)

一、數據庫條件語句:

1 case when id>9 then ture else false

二、三元運算:

1 if(isnull(xx)0,1)

三、上下連表:

select id,name from ta1
union     天然去重(檢測上邊的表和下邊的表行內完全一樣就只顯示一行內容)
select num,sname from tb2
==========================================
select id,name from ta1
union    all 不去重
select num,sname 
from tb2 ---------------------------------------------------------------------------- 註意:上下連接一定要保證行數相等

四、數據庫臨時表:

1 (select * from student)as B
2 創建一個臨時表(臨時表就是存在內存中的拿到的內容,方便下次使用時再次寫) 

五、數據庫視圖:

1 創建視圖
2 create view 視圖名 as sql語句
3 註意:因為視圖是虛擬表,創建視圖就是相當於在實體表中綁定一個動態的表,所以在綁定的實體表數據發生變化時,視圖表也會發生變化。(因為視圖表示虛擬表所以不能進行表的修改操作。)
4 修改視圖 5 alter view 視圖名 as sql語句 6 此處修改視圖(修改視圖綁定的實體表,不能對虛擬表進行修改操作) 7 刪除視圖 8 drop view 視圖名

六、數據庫觸發器:

當對某種表進行修改操作時可以綁定一個觸發器(在觸發器中可以編寫想要執行的SQL語句)

 1 delimiter //
 2 修改MySQL語句中結束語句的符號
 3     create trigger t1 BEFORE INSERT on student for EACH ROW
 4         創建觸犯器(插入一個數據就執行下邊的代碼一次)
 5     BEGIN
 6         開始
7 INSERT into teacher(tname) values(NEW.sname); 8 老師表中插入一個老師名稱 9 INSERT into teacher(tname) values(NEW.sname); 10 此處NEW(綁定觸發器要插入的值獲取到) 11 INSERT into teacher(tname) values(NEW.sname); 12 INSERT into teacher(tname) values(NEW.sname); 13 END // 14 結束 15 delimiter ; 16 修改MySQL語句中結束語句的符號

NEW --- 代指新數據 OLD --- 代指舊數據

七、數據庫函數:

1、內置函數(使用內置函數去MySQL官網中查看)

2、自定義函數

 1 delimiter \ 2     create function f1(i1 int i2 int)
 3 returns int
 4   定義函數,可以傳參,也具有返回值
 5   begin   函數體開始
 6         declare num int default 0;    
 7         set num=i1+i2;
 8         return(num)
 9     end \\   函數體結束
10 delimiter ;  重新設置結束語句

3、調用函數方法

1 select 函數名稱加括號進行調用
2 select f1()

註意:在定義函數時,設定了倆個參數但是只用可一個,另一個參數必須進行傳參,並且在函數體內不能進行selsect操作!

八、數據庫存儲過程:

存儲過程就是保存在MySQL上的有別名(集合)--->SQL語句

存儲過程實現了開發人員寫代碼的過程。

存儲過程一:

MySQL存儲過程,在程序或者客戶端這邊只需要知道存儲過程的名稱就可以調用執行。

存儲過程二:

MySQL服務端啟動,客戶端自己進行寫SQL語句。

創建一個無參的存儲過程:

1 create procedure p1()   創建無參存儲過程
2 begin 
3   select * from student:
4     insert into teacher(tnaem) values(alex)
5 end
6 
7 調用存儲過程
8 call p1()

創建一個有參存儲過程:參數共分為(in(輸入) out(輸出)inout(可輸入可輸出))

 1 delimiter // 
 2         create procedure p2(
 3         in n1 int,
 4         in n2 int          創建有參數的存儲過程,(參數都是in 輸入)
 5             )
 6     BEGIN
 7                 
 8         select * from student where sid > n1;
 9     END //
10 delimiter ;
11             
12 call p2(12,2)    調用執行存儲過程(傳參數)
13 註意:在定義存儲過程時,設定了倆個參數但是只用可一個,另一個參數必須進行傳參

創建一個帶有輸入參數和輸出參數的存儲過程:

 1 delimiter \ 2   create procedrue p3(
 3     in n1 int
 4     out n2 int
 5 )    
 6  begin
 7      set n2=1212
 8     select * from student where sid > n1
 9  end \10  delimiter ;

註意:out 對應的傳值必須是變量,在存儲過程當中是沒有返回值(只能用out偽造一個返回值)在存儲過程當中還可以進行 selsect 操作!

九、數據庫事務:

 1 delimiter \ 2 create procedure p5(
 3 out tse tinyint
 4 )
 5 begin
 6  declare exit handler for sqlexception
 7 begin
 8     --error
 9  set tse=1
10  rollback
11 end;
12 strat TRANSACTION;
13         delete from tb1;
14         insert into tb2(name) values(seven)
15 commit:
16 --success
17 set tse=2;
18 end;
19 delimiter ;

十、數據庫遊標:

 1 delimiter //
 2 create procedure p6()
 3 begin
 4 declare row_id int; -- 自定義變量1  
 5 declare row_num int; -- 自定義變量2 
 6 declare done INT DEFAULT FALSE; 
 7 declare temp int;
 8                 
 9                 declare my_cursor CURSOR FOR select id,num from A;
10                 declare CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
11                 
12                 
13                 
14                 open my_cursor;
15                     xxoo: LOOP
16                         fetch my_cursor into row_id,row_num;
17                         if done then 
18                             leave xxoo;
19                         END IF;
20                         set temp = row_id + row_num;
21                         insert into B(number) values(temp);
22                     end loop xxoo;
23                 close my_cursor;
24                 
25                 
26             end  //
27             delimter ;
28     

十一、動態執行SQL(防SQL註入)

防止SQL註入的共有倆種方式,第一種是在pycharm中設置,第二種是在mysql中設置

 1         delimiter \ 2             CREATE PROCEDURE p8 (
 3                 in nid int
 4             )
 5             BEGIN
 6                 set @nid = nid;
 7                 PREPARE prod FROM select * from student where sid > ?;
 8                 EXECUTE prod USING @nid;
 9                 DEALLOCATE prepare prod; 
10             END\11             delimiter ;

Python/MySQL(四、MySQL數據庫操作)