久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

146次閱讀
沒有評論

共計 2853 個字符,預計需要花費 8 分鐘才能閱讀完成。

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

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

假設 students 表中包含 id 和 name 兩個字段,創(chuàng)建一個函數(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 ;

需要注意的事項:

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

mysql 的默認語句結(jié)束符號是分號,當 mysql 遇到分號時就自動執(zhí)行當前語句。因為函數(shù)定義時包含多條 sql 語句,所以使用 DELIMITER // 先將分隔符設置為 //,等函數(shù)創(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)

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

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

1 DETERMINISTIC 不確定的

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

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

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

5 CONTAINS SQL 包含了 SQL 語句

所以我加上了 READS SQL DATA

3)使用局部變量

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

變量使用:

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

也可以直接使用 set 語句來賦值,如 set sname= lsquo;test rsquo;

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

select find_student(3);

Mysql 自定義函數(shù)創(chuà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

這是因為有一個安全參數(shù)沒有開啟,log_bin_trust_function_creators 默認為 0,是不允許 function 的同步的,開啟這個參數(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;

可以通過這個命令設置,但是 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)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關(guān)注丸趣 TV 行業(yè)資訊頻道。

向 AI 問一下細節(jié)

丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2024-02-03發(fā)表,共計2853字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 葫芦岛市| 九江市| 景东| 英吉沙县| 金阳县| 新龙县| 湘潭县| 自贡市| 恩平市| 焉耆| 依兰县| 昆明市| 锦州市| 兴安盟| 无为县| 滦平县| 东乡族自治县| 芜湖市| 理塘县| 乐东| 怀集县| 定边县| 柘城县| 襄樊市| 耿马| 嘉禾县| 乌拉特前旗| 神木县| 明溪县| 原平市| 砀山县| 久治县| 怀化市| 红河县| 平度市| 宁国市| 贵溪市| 汉寿县| 大连市| 平顶山市| 荥阳市|