声明定义存储过程或者函数时,其中的 delimiter 关键字是干嘛的呢?
生活随笔
收集整理的這篇文章主要介紹了
声明定义存储过程或者函数时,其中的 delimiter 关键字是干嘛的呢?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我們寫 SQL 的時候,MySQL 怎么判斷 SQL 是否已經(jīng)結(jié)束了,可以去執(zhí)行了?
需要一個結(jié)束符,當(dāng) MySQL 看到這個結(jié)束符的時候,表示可以執(zhí)行前面的語句了,MySQL 默認(rèn)以分號為結(jié)束符。
當(dāng)我們創(chuàng)建存儲過程或者自定義函數(shù)的時候,寫了很大一片 SQL,里面包含了很多分號,但是整個代碼語句是一個整體,不能讓 MySQL 讀到分號就立即去執(zhí)行,這樣肯定是不行的。我們需要完整的代碼語句一起執(zhí)行才行。所以此時我們就不可以用分號作為結(jié)束符了,必須另外聲明結(jié)束符。
delimiter 關(guān)鍵字就是用來自定義結(jié)束符的,請參考下面的示例:
mysql> /*創(chuàng)建表test1*/ mysql> drop table IF EXISTS test1; Query OK, 0 rows affected (0.01 sec)mysql> create table test1(a int PRIMARY KEY,b int); Query OK, 0 rows affected (0.01 sec)mysql> mysql> /*聲明腳本的結(jié)束符為$$*/ mysql> DELIMITER $$ mysql> DROP PROCEDURE IF EXISTS proc1;-> CREATE PROCEDURE proc1()-> BEGIN-> /*聲明了一個局部變量*/-> DECLARE v_a int;->-> select ifnull(max(a),0)+1 into v_a from test1;-> select @v_b:=v_a*2;-> insert into test1(a,b) select v_a,@v_b;-> end $$ Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql> mysql> /*聲明腳本的結(jié)束符為;*/ mysql> DELIMITER ; mysql> mysql> /*調(diào)用存儲過程*/ mysql> call proc1(); +-------------+ | @v_b:=v_a*2 | +-------------+ | 2 | +-------------+ 1 row in set (0.00 sec)Query OK, 1 row affected (0.01 sec)mysql> /*查看結(jié)果*/ mysql> select * from test1; +---+------+ | a | b | +---+------+ | 1 | 2 | +---+------+ 1 row in set (0.00 sec)總結(jié)
以上是生活随笔為你收集整理的声明定义存储过程或者函数时,其中的 delimiter 关键字是干嘛的呢?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手把手教你重装系统如何重装电脑系统xp
- 下一篇: 电脑到底应该怎样装软件电脑如何装软件