Mysql中自定義函數(shù)怎么創(chuàng)建

今天小編給大家分享一下MySQL中自定義函數(shù)怎么創(chuàng)建的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

成都創(chuàng)新互聯(lián)公司專注于德陽企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,電子商務(wù)商城網(wǎng)站建設(shè)。德陽網(wǎng)站建設(shè)公司,為德陽等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

    Mysql自定義函數(shù)的創(chuàng)建和執(zhí)行

    假設(shè)students表中包含id和name兩個(gè)字段,創(chuàng)建一個(gè)函數(shù),函數(shù)的作用是根據(jù)id查找name

    1.創(chuàng)建表,插入數(shù)據(jù)
    create table students(id int,name varchar(100));
    insert into students(id,name) values(1,'annie'),(2,'bell'),(3,'danny');
    2.創(chuàng)建函數(shù)
    DELIMITER //
    create function find_student(id int) returns varchar(100)
    READS SQL DATA
    begin
        declare sname varchar(100) default '';
        select students.name into sname from students where students.id=id;
        return sname;
    end //
    DELIMITER ;

    需要注意的事項(xiàng):

    1)使用DELIMITER//修改分隔符

    mysql的默認(rèn)語句結(jié)束符號是分號,當(dāng)mysql遇到分號時(shí)就自動執(zhí)行當(dāng)前語句。因?yàn)楹瘮?shù)定義時(shí)包含多條sql語句,所以使用DELIMITER //先將分隔符設(shè)置為//,等函數(shù)創(chuàng)建語句完成后,再將分隔符改回分號即可。

    2)READS SQL DATA

    之前我沒寫這句話,但是創(chuàng)建時(shí)mysql報(bào)錯,提示Error Code: 1418. 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)

    上網(wǎng)查了一下,意思是沒有聲明mysql函數(shù)的類型:

    mysql開啟了bin-log, 我們就必須指定我們的函數(shù)是否是哪種類型:

    • 1 DETERMINISTIC 不確定的

    • 2 NO SQL 沒有SQl語句,當(dāng)然也不會修改數(shù)據(jù)

    • 3 READS SQL DATA 只是讀取數(shù)據(jù),當(dāng)然也不會修改數(shù)據(jù)

    • 4 MODIFIES SQL DATA 要修改數(shù)據(jù)

    • 5 CONTAINS SQL 包含了SQL語句

    • 所以我加上了READS SQL DATA

    3)使用局部變量

    變量定義:我這里使用declare sname varchar(100) default ‘’;定義了局部變量sname,

    變量使用:

    可以使用select students.name into sname from students where students.id=id;為變量賦值

    也可以直接使用set語句來賦值,如set sname=‘test’

    3.執(zhí)行函數(shù):select 函數(shù)名(參數(shù)值);
    select find_student(3);

    Mysql自定義函數(shù)創(chuàng)建失敗問題

    案例

    目前在項(xiàng)目中,執(zhí)行創(chuàng)建mysql的函數(shù)出錯,

    mysql 創(chuàng)建函數(shù)出錯信息如下:

    Caused by: java.sql.SQLException: 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)
       at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
       at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)
       at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
       at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
       at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2373)
       at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2739)
       at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482)
       at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2440)
       at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:845)
       at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:745)
       ... 35 more

    這是因?yàn)橛幸粋€(gè)安全參數(shù)沒有開啟,log_bin_trust_function_creators 默認(rèn)為0,是不允許function的同步的,開啟這個(gè)參數(shù),就可以創(chuàng)建成功了。

    查看是否開啟:

    show variables like '%func%';
    +---------------------------------+-------+ 
    | Variable_name     | Value | 
    +---------------------------------+-------+ 
    | log_bin_trust_function_creators | ON | 
    +---------------------------------+-------+ 
    1 row in set (0.00 sec)

    為on則是開啟了

    set global log_bin_trust_function_creators = 1;

    可以通過這個(gè)命令設(shè)置,但是MySQL重啟后就失效了。

    所有最后是通過修改MySQL數(shù)據(jù)庫的配置文件

    在配置文件/etc/my.cnf的[mysqld]配置log_bin_trust_function_creators=1

    Mysql中自定義函數(shù)怎么創(chuàng)建

    修改完后重啟MySQL。

    以上就是“Mysql中自定義函數(shù)怎么創(chuàng)建”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

    本文標(biāo)題:Mysql中自定義函數(shù)怎么創(chuàng)建
    文章出自:http://m.kartarina.com/article48/gesdep.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作電子商務(wù)網(wǎng)站內(nèi)鏈App設(shè)計(jì)營銷型網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站

    廣告

    聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

    成都網(wǎng)站建設(shè)公司
    主站蜘蛛池模板: 成人无码午夜在线观看| 日韩精品无码AV成人观看| 亚洲精品无码久久久久久久| 久久水蜜桃亚洲av无码精品麻豆 | 波多野结衣AV无码| 中文字幕av无码不卡| 久久老子午夜精品无码怎么打| 亚洲人成无码网站在线观看 | 无码精品不卡一区二区三区| 亚洲一本大道无码av天堂| 色AV永久无码影院AV| 日韩人妻无码精品无码中文字幕| 亚洲精品中文字幕无码AV| 亚洲AV无码一区二区三区国产| 亚洲AV无码国产精品麻豆天美| 国产成人亚洲精品无码AV大片| 久久久久亚洲AV片无码下载蜜桃 | 中文有无人妻vs无码人妻激烈| 人妻无码第一区二区三区| YW尤物AV无码国产在线观看| 亚洲AV无码一区二区乱子仑| 日韩精品无码一区二区三区不卡| 韩日美无码精品无码| 亚洲国产91精品无码专区| 亚洲精品无码人妻无码| 免费A级毛片无码A∨| 亚洲欧洲无码AV电影在线观看| 国产精品无码制服丝袜| 18禁成年无码免费网站无遮挡| 亚洲国产精品无码久久九九大片| 久久久久亚洲AV无码专区首| 亚洲av无码不卡| 亚洲av无码不卡一区二区三区| 在线a亚洲v天堂网2019无码| 亚洲乱亚洲乱少妇无码| 亚洲日韩VA无码中文字幕| 国产精品无码久久av| 妖精色AV无码国产在线看| 无码熟熟妇丰满人妻啪啪软件| AV大片在线无码永久免费| 久久久久精品国产亚洲AV无码|