mysql批處理/觸發器/事務管理/存儲過程


mysql里的批處理(sql語句)  

格式:

 

mysql u user p < sql_file

表示從某個文件里執行sql語句

mysql u user p < sql_file > out_file

表示從某個文件里執行,並將執行結果保存到out_file文件之中

 

舉個例子:

小王每天早晨來之后,都需要查詢班級共有多少人,還要查本學期共有幾門課程,還要查詢最近的考試成績。。。。。。。。需要做很多操作

 

sql.txt里 

use pingtai;   //選擇數據庫

select * from users  limit 5; //sql語句

delete from users where id = 6;  //只有查詢輸出結果、插入、修改、刪除不會輸出結果

 

 

需要將以上操作存放至一個sql腳本,然后

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

這個例題可以將輸出的查詢結果保存到student.xls文件里。

 

 

 

 

 

 

 

 

 

 

 

觸發器

觸發器是屬於某一個表的

 

當在這個表上執行插入、更新或刪除操作的時候就導致觸發器的激活 

 

我們不能給同一張表的同一個事件安排兩個觸發器 

語法:

create trigger trigger_name  before | after insert | update | delete on table_name

for each row

begin

   sql

   end

create trigger:關鍵字

 

trigger_name:觸發器名稱(自定義)

 

trigger_time:觸發時間,取值范圍:before(之前)和after(之后)

 

trigger_event:觸發事件,取值范圍:insertupdatedelete

 

on:關鍵字

 

table_name:表名

 

for each row:關鍵字

 

begin:開始(關鍵字)

 

sqlsql語句(可以有多條語句)

 

end:結束(關鍵字)

 

 

 

 

管理觸發器 

 

show triggers;

 

查詢當前數據庫下所有表的觸發器

information_schema數據庫下,有一個表叫triggers,里面保存了所有數據的觸發器信息

drop triggers trigger_name ;

刪除觸發器

例題1

 

在新同學入學時,將他的姓名和年齡存至另外一個表內

 

創建觸發器

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

使用觸發器

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

student表插入數據的之后,會向stu表插入新數據的姓名和年齡

 

 

 

 

關鍵字newold的區別:

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

2

刪除一個部門之前,先刪除掉這個部門下的所有員工

Delete from department where name=市場部;

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

市場部  

Old.id=1

3

 

記錄學生的改名記錄

 

當一個學生改名時,把原名和新名插入到一個表中,並保存改名的時間

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

事務管理

 

為保證數據庫內容的一致,就要將數據庫的一組操作作為一個整體來進行,要么全部成功完成,要么全部失敗退出。

 

 

開啟事務處理的方式:

標准事務:start transaction

非標准:set autocommit=0

 

區別?????????

 

標准的:遇到commitrollback語句,則認為是事務終止,后面的語句會立即寫入到文件

非標准的:即使遇到commitrollback語句,后面語句仍然處於事務之中,說明不會寫入到文件

 

 

set autocommit = { 0 | 1 } 設置是否為自動提交

set autocommit=0:表示關閉自動提交模式

set autocommit=1:表示開啟自動提交模式

start transaction:開啟標准事務

commit:提交事務

rollback:回滾事務

Set autocommit=0; //關閉自動提交模式

Delete from student;

Delete from subject;

//到此為止,數據沒有真正寫入到文件

//Commit;

//如果執行commit,數據真正寫入

//Rollback

//事務回滾

問題?

10條數據

先刪除 3

Commit;

先刪除3

Rollback;

Savepoint 還原點1;

操作………………..

Savepoint 還原點2;

操作………………

Savepoint 還原點3;

操作………………

Rollback to 還原點(還原到指定的還原點)

還原到指定的還原點之后,這個還原點之后的還原點會自動消失

存儲過程

大型數據庫系統中,一組為了完成特定功能的SQL 語句集,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。 

 

存儲過程像是我們SQL里的函數

我們只需要定義存儲過程,在調用時,通過指定參數,就可以幫助我們完成一些功能!

1、創建語法:

create procedure sp_name 

[參數名] [類型],[參數名] [類型

 begin 

 ......... 

 end 

create procedure:關鍵字(創建存儲過程)

sp_name:存儲過程名稱

[type]inoutinout

in:輸入參數(在調用存儲過程時,必須指定)

out:輸出參數(必須指定,可以在存儲過程中被修改)

[參數名]

[參數類型]:數據類型

Begin:關鍵字

Sql

Sql

End:關鍵字

2、查看與刪除

select name from mysql.proc where db=’數據庫名’;

我們創建的所有存儲的信息,會保存到mysql數據庫下proc表中

show procedure status where db='數據庫名';

show create procedure 數據庫.存儲

3、調用語法:

 

call sp_name [參數名

 

 

 

 

1

執行一條插入數據的語句

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

調用以上這個存儲過程:

 

call proc1();

 

 

4、關於參數

 

In:輸入參數(如果不指定,默認為in

Out:輸出參數

Inout:輸入輸出參數

 

2

 

創建一個存儲過程,要求有兩個輸入參數分別為姓名和年齡,用戶調用存儲過程時需要指定兩個參數,然后將傳遞的值插入至表中。

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

call proc(楚留香,30);

 

3

 

查詢年齡最大的同學的姓名

 

Select name from student order by age desc limit 1;

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

 

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

4

 

創建一個存儲過程,要求可根據學生編號查詢出學生的姓名和年齡

 

學生編號:輸入參數

姓名:輸出參數

年齡:輸出參數

mysql里的批處理(sql語句)、觸發器、事務管理、存儲過程 - 風信子 - 風信子

 

 

 

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com