日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql的存储过程与事务_mysql的存储过程与事务入门

發布時間:2025/4/5 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql的存储过程与事务_mysql的存储过程与事务入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

存儲過程是:

通過一系列的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')"))

{

mysql_query("ROLLBACK");//判斷當執行失敗時回滾

}

if(!mysql_query("insert into trans (id) values('4')"))

{

mysql_query("ROLLBACK");//判斷執行失敗回滾

}

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的存储过程与事务_mysql的存储过程与事务入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。