亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql中自定義函數怎么創建

發布時間:2023-05-10 09:21:21 來源:億速云 閱讀:266 作者:zzz 欄目:MySQL數據庫

今天小編給大家分享一下Mysql中自定義函數怎么創建的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    Mysql自定義函數的創建和執行

    假設students表中包含id和name兩個字段,創建一個函數,函數的作用是根據id查找name

    1.創建表,插入數據
    create table students(id int,name varchar(100));
    insert into students(id,name) values(1,'annie'),(2,'bell'),(3,'danny');
    2.創建函數
    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 ;

    需要注意的事項:

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

    mysql的默認語句結束符號是分號,當mysql遇到分號時就自動執行當前語句。因為函數定義時包含多條sql語句,所以使用DELIMITER //先將分隔符設置為//,等函數創建語句完成后,再將分隔符改回分號即可。

    2)READS SQL DATA

    之前我沒寫這句話,但是創建時mysql報錯,提示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)

    上網查了一下,意思是沒有聲明mysql函數的類型:

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

    • 1 DETERMINISTIC 不確定的

    • 2 NO SQL 沒有SQl語句,當然也不會修改數據

    • 3 READS SQL DATA 只是讀取數據,當然也不會修改數據

    • 4 MODIFIES SQL DATA 要修改數據

    • 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.執行函數:select 函數名(參數值);
    select find_student(3);

    Mysql自定義函數創建失敗問題

    案例

    目前在項目中,執行創建mysql的函數出錯,

    mysql 創建函數出錯信息如下:

    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

    這是因為有一個安全參數沒有開啟,log_bin_trust_function_creators 默認為0,是不允許function的同步的,開啟這個參數,就可以創建成功了。

    查看是否開啟:

    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;

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

    所有最后是通過修改MySQL數據庫的配置文件

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

    Mysql中自定義函數怎么創建

    修改完后重啟MySQL。

    以上就是“Mysql中自定義函數怎么創建”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    罗江县| 陆良县| 灵丘县| 襄樊市| 雷州市| 赣州市| 灵石县| 施秉县| 鄂尔多斯市| 周至县| 呼玛县| 三亚市| 东至县| 丹棱县| 长白| 化德县| 临湘市| 榆中县| 海盐县| 新密市| 顺昌县| 英山县| 偃师市| 东山县| 乌拉特后旗| 桐庐县| 彩票| 保定市| 香格里拉县| 墨脱县| 綦江县| 青冈县| 台江县| 南皮县| 赤壁市| 任丘市| 靖江市| 皋兰县| 阿城市| 隆昌县| 剑川县|