欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql中自定義函數的創(chuàng)建和執(zhí)行方式

 更新時間:2023年03月10日 09:23:18   作者:萬能車  
這篇文章主要介紹了Mysql中自定義函數的創(chuàng)建和執(zhí)行方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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

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

1.創(chuàng)建表,插入數據

create table students(id int,name varchar(100));
insert into students(id,name) values(1,'annie'),(2,'bell'),(3,'danny');

2.創(chuàng)建函數

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遇到分號時就自動執(zhí)行當前語句。因為函數定義時包含多條sql語句,所以使用DELIMITER //先將分隔符設置為//,等函數創(chuàng)建語句完成后,再將分隔符改回分號即可。

2)READS SQL DATA

之前我沒寫這句話,但是創(chuàng)建時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.執(zhí)行函數:select 函數名(參數值);

select find_student(3);

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

案例

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

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

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的同步的,開啟這個參數,就可以創(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;

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

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

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

在這里插入圖片描述

修改完后重啟MySQL。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • MySQL中對于NULL值的理解和使用教程

    MySQL中對于NULL值的理解和使用教程

    這篇文章主要介紹了MySQL中對于NULL值的理解和使用教程,是MySQL入門學習中的基礎知識,需要的朋友可以參考下
    2015-11-11
  • SQL創(chuàng)建視圖的注意事項及說明

    SQL創(chuàng)建視圖的注意事項及說明

    這篇文章主要介紹了SQL創(chuàng)建視圖的注意事項及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • mysql通配符的具體使用

    mysql通配符的具體使用

    通配符用于替換字符串中的一個或多個字符,通配符與LIKE運算符一起使用,本文就詳細的介紹了mysql通配符的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-05-05
  • 如何在mysql進行查詢緩存及失敗的解決方法

    如何在mysql進行查詢緩存及失敗的解決方法

    這篇文章主要介紹了如何在mysql進行查詢緩存及失敗的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 利用MyFlash實現(xiàn)MySQL數據閃回的操作指南

    利用MyFlash實現(xiàn)MySQL數據閃回的操作指南

    MySQL數據閃回是一種高級功能,它允許你在數據庫中恢復到某個特定的時間點,通常是事務開始或保存點的狀態(tài),以便處理數據錯誤或回滾意外更改,本文給大家介紹了如何利用MyFlash實現(xiàn)MySQL數據閃回,需要的朋友可以參考下
    2024-06-06
  • MySQL死鎖解析與解決方法

    MySQL死鎖解析與解決方法

    在數據庫管理中,死鎖是一種常見而又棘手的問題,當多個事務相互等待對方釋放鎖資源時,死鎖就會發(fā)生,本文將介紹MySQL中死鎖產生的原因、如何查詢死鎖,以及解決死鎖的方法,需要的朋友可以參考下
    2024-01-01
  • Navicat for MySQL導出表結構腳本的簡單方法

    Navicat for MySQL導出表結構腳本的簡單方法

    下面小編就為大家?guī)硪黄狽avicat for MySQL導出表結構腳本的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • step by step配置mysql復制的具體方法

    step by step配置mysql復制的具體方法

    每個服務器必須有唯一的server-id,默認為1,為了防止沖突,一般建議設置為IP地址的后幾位,本例設置為12,通過修改主庫的my.cnf文件實現(xiàn)
    2013-09-09
  • mysql數據插入效率比較

    mysql數據插入效率比較

    今天小編就為大家分享一篇關于mysql數據插入效率比較,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • mysql模糊查詢like和regexp小結

    mysql模糊查詢like和regexp小結

    在mysql中實現(xiàn)模糊查詢有兩種方法一種是LIKE/NOT LIKE,另一種是REGEXP/NOT REGEXP方法,下面我來給大家介紹它們的用法,希望此教程對各位同學會有所幫助。
    2014-09-09

最新評論