声明定义存储过程或者函数时,其中的 delimiter 关键字是干嘛的呢?
生活随笔
收集整理的這篇文章主要介紹了
声明定义存储过程或者函数时,其中的 delimiter 关键字是干嘛的呢?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們寫 SQL 的時候,MySQL 怎么判斷 SQL 是否已經結束了,可以去執行了?
需要一個結束符,當 MySQL 看到這個結束符的時候,表示可以執行前面的語句了,MySQL 默認以分號為結束符。
當我們創建存儲過程或者自定義函數的時候,寫了很大一片 SQL,里面包含了很多分號,但是整個代碼語句是一個整體,不能讓 MySQL 讀到分號就立即去執行,這樣肯定是不行的。我們需要完整的代碼語句一起執行才行。所以此時我們就不可以用分號作為結束符了,必須另外聲明結束符。
delimiter 關鍵字就是用來自定義結束符的,請參考下面的示例:
mysql> /*創建表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> /*聲明腳本的結束符為$$*/ 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> /*聲明腳本的結束符為;*/ mysql> DELIMITER ; mysql> mysql> /*調用存儲過程*/ 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> /*查看結果*/ mysql> select * from test1; +---+------+ | a | b | +---+------+ | 1 | 2 | +---+------+ 1 row in set (0.00 sec)總結
以上是生活随笔為你收集整理的声明定义存储过程或者函数时,其中的 delimiter 关键字是干嘛的呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手把手教你重装系统如何重装电脑系统xp
- 下一篇: MacBook如何设置自动纠正拼写和自动