tft每日頭條

 > 圖文

 > mysqlsql語句會超長嗎

mysqlsql語句會超長嗎

圖文 更新时间:2025-02-08 07:09:27

上一篇:sql拆分文本為數組,實際案例帶你2分鐘學會


前述3篇文章已經分享了Mysql的高級特性:窗口函數、wit通用表達式和json函數,本文将繼續分享高級特性,自定義函數,分三部分呈現:

第一部分,介紹Mysql的自定義函數。

第二部分,實戰,解決問題。

第三部分,總結。

一、自定義函數

通常編程語言中的函數是必備技能,不管是面向對象還是面向過程,都離不開函數。Mysql中也有函數功能,常用的是内置函數(built-in functions),自定義函數功能也要學會,很實用。

1、創建函數

下面2個簡單的實例找下整體的定義感覺。

1.1 無參函數

mysqlsql語句會超長嗎(Mysql高級特性函數)1

1.2 有參函數

函數的括号裡有參數。

mysqlsql語句會超長嗎(Mysql高級特性函數)2

2、聲明

函數定義必須聲明方式,否則會報錯。截取官方文檔中的說明:

When you create a stored function, you must declare either that it is deterministic or that it does not modify data. Otherwise, it may be unsafe for data recovery or replication. By default, for a CREATE FUNCTION statement to be accepted, at least one of DETERMINISTIC, NO sql, or READS SQL DATA must be specified explicitly. Otherwise an error occurs: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

mysqlsql語句會超長嗎(Mysql高級特性函數)3

mysqlsql語句會超長嗎(Mysql高級特性函數)4

3、複雜函數體

在函數體body中,可以實現複雜的邏輯,這樣就把很多不斷重複做的查詢統計預先定義好,直接調用函數即可。

函數體中的語法更豐富,相當于就是編程語言,有控制、邏輯、分析、流程、變量等。之前分享的語法也可以運用到body中。

mysqlsql語句會超長嗎(Mysql高級特性函數)5

3、函數的增删改查

數據表通常說增删改查,函數也有這個說法,誰讓是自定義的呢,不讓改和删還了得。

3.1 增

在上面已經呈現。

3.2 查列表

mysqlsql語句會超長嗎(Mysql高級特性函數)6

3.3 查定義

mysqlsql語句會超長嗎(Mysql高級特性函數)7

3.4 删

mysqlsql語句會超長嗎(Mysql高級特性函數)8

3.3 改

官方文檔顯示,不允許修改,所以隻能先删再建。

For stored procedures and functions and for triggers, you must drop the object and re-create it to assign a different DEFINER account.

查到原來定義,修改好,删掉原來的函數,再執行新增修改後的函數。

二、實戰

1、類數組轉為json數組

繼續之前案例,這樣就方便很多了。在同一個分析主題内,f_json()函數會讓sql清爽許多。

mysqlsql語句會超長嗎(Mysql高級特性函數)9

2、計算字符中匹配字符的個數

這也是此前案例中用到的場景,補充了字符函數的缺失功能——字符計數。

mysqlsql語句會超長嗎(Mysql高級特性函數)10

三、總結

(1)函數,把複雜的邏輯封裝起來,直接調用,會使sql看起來清爽許多。

(2)筆者,常常唠叨的就是,重複操作的一定要封裝為函數(不過用的R語言,後續也有R專欄)。

(3)使用自定義函數,就不得不提存儲過程。關注後續文章。


上一篇:sql拆分文本為數組,實際案例帶你2分鐘學會

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved