儲存過程是:
通過一系列的sql語句, 根據傳入的引數(也可以沒有), 通過簡單的呼叫,
完成比單個sql語句更複雜的功能, 儲存在資料庫伺服器端,只需要編譯過一次之後再次使用都不需要再進行編譯。主要對儲存的過程進行控制。
事務是一系列的資料更改操作組成的乙個整體。一旦事務中包含的某操作失敗或使用者中止,使用者可以控制將事務體中所有操作撤消,返回事務開始前的狀態。
事務中的操作是乙個整體,要麼整體完成,要麼全部不做。從而保證了資料的完整性。
mysql中,myisam儲存引擎不支援事務,innodb支援。
兩者都是資料庫中非常重要的知識。
一、儲存過程
建立一張test1表的儲存過程
mysql> delimiter $ -- delimiter $是設定 $為命令終止符號,代替預設的分號,因為分號有其他用處.
mysql> create procedure sp_test1()
-> begin
-> create table test1(id int,name varchar(100));
->insert into test1 values(1,'lilei');
-> select * from test1;
-> end
-> $
query ok, 0 rows affected (0.00 sec)
mysql> delimiter ; //恢復分號作為分隔終止符號
呼叫儲存過程
mysql> call sp_test1();
建立帶引數的儲存過程
mysql> delimiter $ -- delimiter $是設定 $為命令終止符號,代替預設的分號,因為分號有其他用處.
mysql> create procedure sp_test(in pi_id int, out po_name varchar(10))
-> begin
-> select * from test.tb_test;
-> select tb_test.name into po_name from test.tb_test where tb_test.id = pi_id;
-> end
-> $
query ok, 0 rows affected (0.00 sec)
mysql> delimiter ; -- 恢復分號作為分隔終止符號
5.呼叫儲存過程
mysql> set @po_name='';
query ok, 0 rows affected (0.00 sec)
mysql> call sp_test(1,@po_name);
二、事務處理
mysql中如果是不支援事務的引擎,如myisam,則是否commit都沒有效的。如果是支援事務的引擎,如innodb,則有系統引數設定是否自動commit,檢視引數如下:
mysql> show variables like '%autocommit%';
+---------------+-------+
| variable_name | value |
+---------------+-------+
| autocommit | on |
+---------------+-------+
1 row in set (0.00 sec)
mysql>
顯示結果為on表示事務自動提交,也即不用手工去commit。
當然,你可以設定其為off,然後自己手工去commit。
使用了commit後你不可以回退,它會永久改變你的資料,而不使用只是臨時改變,它把改變後的內容備份了乙份在日誌中,你可以rollback還原回來,看情況而用了。
<?php
$handler=mysql_connect("localhost","root","password");
mysql_select_db("task");
mysql_query("set autocommit=0");//設定為不自動提交,因為mysql預設立即執行
mysql_query("begin");//開始事務定義
if(!mysql_query("insert into trans (id) values('2')"))
if(!mysql_query("insert into trans (id) values('4')"))
mysql_query("commit");//執行事務
mysql_close($handler);
?>
mysql控制台事務處理
mysql> use test;
database changed
mysql> create table `dbtest`(
-> id int(4)
-> ) type=innodb;
query ok, 0 rows affected, 1 warning (0.05 sec)
mysql> select * from dbtest
-> ;
empty set (0.01 sec)
mysql> begin; //開啟事務
query ok, 0 rows affected (0.00 sec)
mysql> insert into dbtest value(5);//插入資料,表中資料臨時改變,可回滾
query ok, 1 row affected (0.00 sec)
mysql> insert into dbtest value(6);//插入資料,表中資料臨時改變,可以回滾
query ok, 1 row affected (0.00 sec)
mysql> commit; //提交,表中臨時資料不可回滾
query ok, 0 rows affected (0.00 sec)
mysql> select * from dbtest;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.00 sec)
mysql> begin; //開啟事務
query ok, 0 rows affected (0.00 sec)
mysql> insert into dbtest values(7); //插入資料,表中資料臨時改變
query ok, 1 row affected (0.00 sec)
mysql> rollback; //回滾到事務開始前資料
query ok, 0 rows affected (0.00 sec)
mysql> select * from dbtest;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.00 sec)
mysql 儲存過程與事務
最近在工作中要實現乙個功能,在乙個php檔案裡有乙個流水號的變數,每次執行這個php的檔案,這個流水號的變數都得不一樣,我就想到用mysql的自增來解決,我寫了乙個儲存過程,create procedure mqsearch in userid int,in type int,out lshs bi...
事務與儲存過程
1 事務的概念 就是為了防止任意一條資料出現異常的情況下沒有執行,則導致兩個賬戶的金額不同步造成錯誤的情況下,所謂的事務就是針對資料庫的一組操作,他可以有一條或者多條語句組成,同乙個事務操作具備同步性。也就是說,事務中的語句要麼就執行,要麼都不執行。在資料庫使用事務的時候,我們就是要開啟事務 1 s...
Mysql 事務與儲存過程中事務的管理
目標 1.了解事物的概念,會開啟 提交和回滾事務 2.掌握事物的4種隔離級別 3.學會建立儲存過程 4.學會呼叫 檢視 修改和刪除儲存過程 事務管理 1.什麼是事務 一條或多條sql語句 所謂的事物就是針對資料庫的一組操作,可以是一條或者多條sql語句組成,同乙個事務具有同步的特點,如果其中一條無法...