最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)庫之內(nèi)置函數(shù)和自定義函數(shù) function

 更新時間:2022年06月15日 17:23:29   作者:彭世瑜  
這篇文章主要介紹了MySQL數(shù)據(jù)庫之內(nèi)置函數(shù)和自定義函數(shù) function,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下

前言:

函數(shù)分為兩類:系統(tǒng)函數(shù)和自定義函數(shù)

使用函數(shù):

select 函數(shù)名(參數(shù)列表);

1、內(nèi)置函數(shù)

1.1、字符串函數(shù)

函數(shù)名說明
char_length判斷字符串的字符數(shù)
length判斷字符串的字節(jié)數(shù),與字符集有關(guān)
concat連接字符串
insrt檢查字符是否在目標字符串中,存在返回其位置,不存在返回 0
lcase全部小寫
ltrim消除左邊的空格
left(str, length)左側(cè)開始截取字符串,直到指定位置
right(str, length)右側(cè)開始截取字符串,直到指定位置
mid從中間指定位置開始截取,如果不指定截取長度,直接到最后
substring(str, index, [length])從指定位置開始,指定截取長度
substring_index(str, delim, count)按照關(guān)鍵字截取

示例:

select char_length('你好中國'); // 4
select length('你好中國'); // 12
select length('hello'); // 5
select char_length('hello'); // 5
select concat('你好', '中國'); // 你好中國
-- 下標從 1 開始
select instr('你好中國', '中國'); // 3
select instr('你好中國', '我'); // 0
select lcase('aBcd'); // abcd
select left('aBcd', 2); // aB
select right('abcdef', 2); // ef
select substring('abcdef', 2, 3); // bcd
select substring('abcdef', -2, 3); // ef
select ltrim(' abc d '); // abc d
select mid('你好中國', 3); // 中國
select substring_index('www.baidu.com', '.', 2); // www.baidu
select substring_index('www.baidu.com', '.', -2); // baidu.com

1.2、時間函數(shù)

函數(shù)名說明
now()返回當前時間,日期 時間
curdate()當前日期
curtime()當前時間
datediff()判斷兩個日期之間的天數(shù)之差,日期使用字符串格式(用引號)
date_add(日期, interval 時間數(shù)字 type)時間增加(type:
unix_timestamp()獲取時間戳
from_unixtime()將指定時間戳轉(zhuǎn)換成對應(yīng)的日期時間格式

示例:

select now(); // 2022-04-10 22:05:38
select curdate(); // 2022-04-10
select curtime(); // 22:05:51
select datediff('2022-01-09', '2022-01-01'); // 8
select date_add('2000-10-01', interval 10 day); // 2000-10-11
select unix_timestamp(); // 1649599799
select from_unixtime(1649599799); // 2022-04-10 22:09:59

1.3、數(shù)學(xué)函數(shù)

函數(shù)名說明
abs絕對值
ceiling向上取整
floor向下取整
pow指數(shù)
rand隨機數(shù)(0-1)
round四舍五入

示例:

select abs(-1); // 1
select ceiling(1.1); // 2
select floor(1.9); // 1
select pow(2, 4); // 16
select rand(); // 0.2616088308967732
select round(1.5); // 2

1.4、其他函數(shù)

函數(shù)名說明
md5()MD5
version()版本號
database()顯示當前所在數(shù)據(jù)庫
uuid()生成一個唯一標識符,全局唯一

示例:

select md5('abc'); // 900150983cd24fb0d6963f7d28e17f72
select version(); // 8.0.16
select database(); // mydatabase
select uuid(); // c44a06a2-b8d8-11ec-a53c-504259f9d746

2、自定義函數(shù)

mysql一旦見到分號結(jié)束符,就會開始執(zhí)行

修改語句結(jié)束符

基本語法:

delimiter 符號;

2.1、創(chuàng)建函數(shù)

基本語法:

-- 修改語句結(jié)束符
delimiter $$;
create function 函數(shù)名(形參) returns 返回值類型
begin
    // 函數(shù)體
    return 返回值數(shù)據(jù);
end
語句結(jié)束符
-- 將語句結(jié)束符修改回來
delimiter ;

示例:

-- 修改語句結(jié)束符
delimiter $$
create function my_func1() returns int
begin
    return 10;
end
-- 結(jié)束
$$
-- 將語句結(jié)束符改回來
delimiter ;

如果只有一條語句,可以省略begin 和 end

-- 最簡單的函數(shù)
create function foo() returns int
return 10;

為函數(shù)的形參指定數(shù)據(jù)類型

基本語法:

形參 數(shù)據(jù)類型

示例:

create function my_func2(a int, b int) returns int
return a * b;

2.2、查看函數(shù)

基本語法:

show function status [like 'pattern'];

示例:

-- 查看所有函數(shù)
show function status\G
-- 查看單個函數(shù)
mysql> show function status like 'foo'\G
*************************** 1. row ***************************
                  Db: mydatabase
                Name: foo
                Type: FUNCTION
             Definer: root@localhost
            Modified: 2022-04-10 22:34:06
             Created: 2022-04-10 22:34:06
       Security_type: DEFINER
             Comment:
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8mb4_general_ci
1 row in set (0.00 sec)
-- 查看函數(shù)創(chuàng)建語句
mysql> show create function foo\G
*************************** 1. row ***************************
            Function: foo
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
     Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `foo`() RETURNS int(11)
return 10
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8mb4_general_ci
1 row in set (0.01 sec)

2.3、調(diào)用函數(shù)

基本語法

select 函數(shù)名(實參列表);

示例:

mysql> select foo();
+-------+
| foo() |
+-------+
|    10 |
+-------+
mysql> select my_func2(2, 3);
+----------------+
| my_func2(2, 3) |
+----------------+
|              6 |
+----------------+

2.4、刪除函數(shù)

基本語法

drop function 函數(shù)名;

示例:

drop function my_func1;

2.5、注意事項

  • 自定義函數(shù)屬于用戶級別,只有當前客戶端對應(yīng)的數(shù)據(jù)庫中可以使用
  • 可以在不同數(shù)據(jù)庫下看到函數(shù),但是不可以調(diào)用
  • 自定義函數(shù)通常是為了將多行代碼集合到一起解決一個重復(fù)性的問題

4.函數(shù)必須規(guī)范返回值,那么在函數(shù)內(nèi)部不能使用select指令,select一旦執(zhí)行就會的到一個結(jié)果集 result set;

可以使用給變量賦值語句

select 字段 into @變量;

3、函數(shù)流程結(jié)構(gòu)案例

需求:

從1開始,直到用戶傳入的對應(yīng)的值位置,自動求和,凡是5的倍數(shù)都不要

設(shè)計:

  • 創(chuàng)建函數(shù)
  • 需要一個形參,確定要累加到什么位置
  • 需要定義一個變量來保存對應(yīng)的結(jié)果
  • 內(nèi)容部需要一個循環(huán)來實現(xiàn)迭代累加
  • 循環(huán)內(nèi)部需要進行條件判斷控制,5的倍數(shù)

定義函數(shù):

-- 創(chuàng)建一個自動求和的函數(shù)
-- 修改語句結(jié)束符
delimiter $$
-- 創(chuàng)建函數(shù)
create function my_sum(end_value int) returns int
begin
    -- 聲明局部變量
    declare res int default 0;
    declare i int default 0;
    -- 循環(huán)處理
    mywhile: while i <= end_value do
        -- mysql中沒有++
        set i = i + 1; 
        --  判斷當前數(shù)據(jù)是否合理
        if i % 5 = 0 then
            iterate mywhile;
        end if;
        -- 修改變量,累加
        set res = res + i;
    end while;
    -- 返回值
    return res;
end

-- 結(jié)束
$$
-- 修改語句結(jié)束符
delimiter ;

調(diào)用函數(shù):

-- 實參個數(shù)必須等于形參個數(shù)
select my_sum(10);

相關(guān)文章

  • windows下mysql 8.0.15 詳細安裝使用教程

    windows下mysql 8.0.15 詳細安裝使用教程

    這篇文章主要為大家詳細介紹了windows下mysql 8.0.15 詳細安裝使用教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • mysql通過Navicat分區(qū)實操講解

    mysql通過Navicat分區(qū)實操講解

    在本文里我們給大家整理了關(guān)于mysql通過Navicat分區(qū)的相關(guān)知識點,需要的朋友們跟著學(xué)習(xí)參考下。
    2019-03-03
  • 從源碼到實戰(zhàn)盤點MySQL中不寫B(tài)inlog的N種場景

    從源碼到實戰(zhàn)盤點MySQL中不寫B(tài)inlog的N種場景

    Binlog(二進制日志)是MySQL的核心組件,負責(zé)記錄數(shù)據(jù)變更,支撐著主從復(fù)制、數(shù)據(jù)恢復(fù)等重要功能,本文將深入MySQL源碼,徹底解析哪些場景下MySQL不會寫入binlog,希望對大家有所幫助
    2026-02-02
  • 解決Mysql服務(wù)器啟動時報錯問題的方法

    解決Mysql服務(wù)器啟動時報錯問題的方法

    這篇文章主要介紹了解決Mysql服務(wù)器啟動時報錯問題的方法,需要的朋友可以參考下
    2015-11-11
  • 實例講解MySQL 慢查詢

    實例講解MySQL 慢查詢

    這篇文章主要介紹了MySQL 慢查詢的相關(guān)資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-12-12
  • MySQL性能壓力基準測試工具sysbench的使用簡介

    MySQL性能壓力基準測試工具sysbench的使用簡介

    這篇文章主要介紹了MySQL性能壓力基準測試工具sysbench的使用簡介,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-04-04
  • 一文帶你深入了解?MySQL的鎖機制

    一文帶你深入了解?MySQL的鎖機制

    在數(shù)據(jù)庫系統(tǒng)中,同時有多個用戶或進程訪問數(shù)據(jù)是常見的情況,為了確保數(shù)據(jù)的完整性和一致性,數(shù)據(jù)庫管理系統(tǒng)引入了鎖機制,本文將深入探討?MySQL?鎖機制,幫助您理解鎖的分類、實現(xiàn)方式以及使用場景和優(yōu)化策略,需要的朋友可以參考下
    2023-05-05
  • MySQL支持地理位置查詢的詳細步驟和代碼示例

    MySQL支持地理位置查詢的詳細步驟和代碼示例

    MySQL支持地理位置查詢,主要通過空間擴展實現(xiàn),支持的地理空間數(shù)據(jù)類型包括POINT、LINESTRING和POLYGON,通過創(chuàng)建表和插入地理空間數(shù)據(jù),可以使用MySQL提供的函數(shù)進行地理位置相關(guān)的查詢,感興趣的朋友一起看看吧
    2025-12-12
  • 在MySQL中不建議使用長事務(wù)的根因詳析

    在MySQL中不建議使用長事務(wù)的根因詳析

    長事務(wù)顧名思義就是運行時間比較長,長時間未提交的事務(wù),也可以稱之為大事務(wù),這類事務(wù)往往會造成大量的阻塞和鎖超時,容易造成主從延遲,要盡量避免使用長事務(wù),這篇文章主要介紹了在MySQL中不建議使用長事務(wù)根因的相關(guān)資料,需要的朋友可以參考下
    2025-12-12
  • MySQL 實現(xiàn)雙向復(fù)制的方法指南

    MySQL 實現(xiàn)雙向復(fù)制的方法指南

    這篇文章主要介紹了MySQL 實現(xiàn)雙向復(fù)制的方法指南,本文包括:主機配置,從機配置,建立主-從復(fù)制,建立雙向復(fù)制,需要的朋友可以參考下
    2015-03-03

最新評論

青川县| 宜宾县| 察隅县| 长岭县| 南通市| 伊春市| 泸水县| 开封县| 横峰县| 广东省| 沙湾县| 百色市| 漳平市| 耿马| 若羌县| 宁晋县| 八宿县| 万年县| 永靖县| 济宁市| 古交市| 偃师市| 延边| 红原县| 班戈县| 通化市| 铜山县| 韶关市| 博爱县| 南陵县| 沈丘县| 正安县| 山西省| 固镇县| 遂昌县| 东山县| 潞西市| 鸡泽县| 巢湖市| 兴业县| 蓬溪县|