mysql的儲存過程與事務入門

2021-09-08 18:32:28 字數 3608 閱讀 4990

儲存過程是:

通過一系列的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語句組成,同乙個事務具有同步的特點,如果其中一條無法...