在php最上面寫error_reporting(E_ALL ~E_DEPRECATED);忽略錯誤。
站在用戶的角度思考問題,與客戶深入溝通,找到鞏留網(wǎng)站設計與鞏留網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設計、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋鞏留地區(qū)。
MySQL 是一種數(shù)據(jù)庫。數(shù)據(jù)庫定義了存儲信息的結(jié)構(gòu)。
在數(shù)據(jù)庫中,存在著一些表。類似 HTML 表格,數(shù)據(jù)庫表含有行、列以及單元。
在分類存儲信息時,數(shù)據(jù)庫非常有用。一個公司的數(shù)據(jù)庫可能擁有這些表:"Employees", "Products", "Customers" 以及 "Orders"。
調(diào)用如:select 函數(shù)名(參數(shù)列表)。 mysql中的UDF(自定義函數(shù)),可以寫好一些方法或 函數(shù),然后進行調(diào)用,而且是在SQL語句中可以進行調(diào)用。 DROP FUNCTION CalculateAmount CREATE FUNCTION CalculateAmount(userid INT) RETURNS float(10,2) BEGIN DECLARE totalCredits FLOAT; SELECT SUM(amount) INTO totalAmount FROM credit_user WHERE id =userid; RETURN totalAmount; END 要注意的是,在UDF中,不要定義與數(shù)據(jù)表中重名的列。而在SQL中, 則可以像SELECT CalculateAmount(1);那樣去調(diào)用了。
mysql 開啟查詢緩存可以有兩種方法來開啟一種是使用set命令來進行開啟,另一種是直接修改my.ini文件來直接設置都是非常的簡單的哦。
開啟緩存,設置緩存大小,具體實施如下:
windows下是my.ini,linux下是my.cnf;
在配置文件的最后追加上:
需要重啟mysql生效;
b) 開啟緩存,兩種方式:
a)使用mysql命令:
如果報錯:
Query cache is disabled; restart the server with query_cache_type=1 to enable it,還是老老實實的該配置文件,然后重啟吧,原因如下:
查看是否設置成功
show variables like "%query_cache%" 查看是否設置成功:
當然如果你的數(shù)據(jù)表有更新怎么辦,沒關系mysql默認會和這個表有關系的緩存刪掉,下次查詢的時候會直接讀表然后再緩存
下面是一個簡單的例子:
以上的相關內(nèi)容就是對mysql緩存查詢和設置的介紹,望你能有所收獲。
一般,我們會把 query_cache_type 設置為 ON,默認情況下應該是ON
query_cache_type有3個值 0代表關閉查詢緩存OFF,1代表開啟ON,2(DEMAND)代表當sql語句中有SQL_CACHE關鍵詞時才緩存,如:
這樣 當我們執(zhí)行 select id,name from tableName; 這樣就會用到查詢緩存。
①在 query_cache_type 打開的情況下,如果你不想使用緩存,需要指明
select sql_no_cache id,name from tableName;
②當sql中用到mysql函數(shù),也不會緩存
當然也可以禁用查詢緩存: mysql set session query_cache_type=off;
上面的顯示,表示設置查詢緩存是可用的。
表示查詢緩存大小,也就是分配內(nèi)存大小給查詢緩存,如果你分配大小為0,
那么 第一步 和 第二步 起不到作用,還是沒有任何效果。
上面是 mysql6.0設置默認的,之前的版本好像默認是0的,那么就要自己設置下。
設置
這里是設置1M左右,900多K。
再次查看下:
顯示我們設置新的大小,表示設置成功。
例如: 如果查詢結(jié)果很大, 也緩存????這個明顯是不可能的。
MySql 可以設置一個最大的緩存值,當你查詢緩存數(shù)結(jié)果數(shù)據(jù)超過這個值就不會
進行緩存。缺省為1M,也就是超過了1M查詢結(jié)果就不會緩存。
這個是默認的數(shù)值,如果需要修改,就像設置緩存大小一樣設置,使用set
重新指定大小。
好了,通過4個步驟就可以 打開了查詢緩存,具體值的大小和查詢的方式 這個因不同
的情況來指定了。
mysql查詢緩存相關變量
MySQL 提供了一系列的 Global Status 來記錄 Query Cache 的當前狀態(tài),具體如下:
Qcache_free_blocks:目前還處于空閑狀態(tài)的 Query Cache 中內(nèi)存 Block 數(shù)目
Qcache_free_memory:目前還處于空閑狀態(tài)的 Query Cache 內(nèi)存總量
Qcache_hits:Query Cache 命中次數(shù)
Qcache_inserts:向 Query Cache 中插入新的 Query Cache 的次數(shù),也就是沒有命中的次數(shù)
Qcache_lowmem_prunes:當 Query Cache 內(nèi)存容量不夠,需要從中刪除老的 Query Cache 以給新的 Cache 對象使用的次數(shù)
Qcache_not_cached:沒有被 Cache 的 SQL 數(shù),包括無法被 Cache 的 SQL 以及由于 query_cache_type 設置的不會被 Cache 的 SQL
Qcache_queries_in_cache:目前在 Query Cache 中的 SQL 數(shù)量
Qcache_total_blocks:Query Cache 中總的 Block 數(shù)量
檢查是否從查詢緩存中受益的最簡單的辦法就是檢查緩存命中率
當服務器收到SELECT 語句的時候,Qcache_hits 和Com_select 這兩個變量會根據(jù)查詢緩存
的情況進行遞增
查詢緩存命中率的計算公式是:Qcache_hits/(Qcache_hits + Com_select)。
query_cache_min_res_unit的配置是一柄”雙刃劍”,默認是4KB,設置值大對大數(shù)據(jù)查詢有好處,但如果你的查詢都是小數(shù)據(jù) 查詢,就容易造成內(nèi)存碎片和浪費。
查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
如果查詢緩存碎片率超過20%,可以用FLUSH QUERY CACHE整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小數(shù)據(jù)量的話。
查詢緩存利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size * 100%
查詢緩存利用率在25%以下的話說明query_cache_size設置的過大,可適當減小;查詢緩存利用率在80%以上而且 Qcache_lowmem_prunes 50的話說明query_cache_size可能有點小,要不就是碎片太多。
查詢緩存命中率 = (Qcache_hits - Qcache_inserts) / Qcache_hits * 100%
示例服務器 查詢緩存碎片率 = 20.46%,查詢緩存利用率 = 62.26%,查詢緩存命中率 = 1.94%,命中率很差,可能寫操作比較頻繁吧,而且可能有些碎片。
查詢緩存可以看做是SQL文本和查詢結(jié)果的映射。如果第二次查詢的SQL和第一次查詢的SQL完全相同(注意必須是完全相同,即使多一個空格或者大小寫不同都認為不同)且開啟了查詢緩存,那么第二次查詢就直接從查詢緩存中取結(jié)果,可以通過下面的SQL來查看緩存命中次數(shù)(是個累加值):
另外即使完全相同的SQL,如果使用不同的字符集、不同的協(xié)議等也會被認為是不同的查詢而分別進行緩存。
在表的結(jié)構(gòu)或數(shù)據(jù)發(fā)生改變時,查詢緩存中的數(shù)據(jù)不再有效。有這些INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE會導致緩存數(shù)據(jù)失效。所以查詢緩存適合有大量相同查詢的應用,不適合有大量數(shù)據(jù)更新的應用。
可以使用下面三個SQL來清理查詢緩存:
1、FLUSH QUERY CACHE; // 清理查詢緩存內(nèi)存碎片。
2、RESET QUERY CACHE; // 從查詢緩存中移出所有查詢。
3、FLUSH TABLES; //關閉所有打開的表,同時該操作將會清空查詢緩存中的內(nèi)容。
Query Cache是MySQL Server層的一個非常好的特性,對于小數(shù)據(jù)集或訪問量非常集中的應用場景,有非常好的性能提升,但是Query Cache引入了一些新的問題,而且大部分場景下比較雞肋,官方打算棄用了
參考:
主要介紹如下幾個方面的設置:
1.load data infile
?View Code MYSQL
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char' ]
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...)]
LOAD DATA INFILE語句用于高速地從一個文本文件中讀取行,并裝入一個表中。
這是一個很危險的內(nèi)置函數(shù),所以一般建議禁用掉(除非程序有用到本地文件)
通過在my.cnf中設置
1
local-infile=0|1 0表示禁用,1表示開啟
2.load_file函數(shù)
這個函數(shù)和上面的load data 函數(shù)類似,都是讀取本地文件,對于load_file(filename)函數(shù)的使用有如下的條件限制:
讀取文件并將這一文件按照字符串的格式返回。 文件的位置必須在服務器上,你必須為文件制定路徑全名,而且你還必須擁有FILE 特許權。文件必須可讀取,文件容量必須小于 max_allowed_packet字節(jié)。
若文件不存在,或因不滿足上述條件而不能被讀取, 則函數(shù)返回值為 NULL。
這個主要通過mysql授權來禁用這個函數(shù),收回用戶的file權限
1
revoke file on *.* from 'user'@'IP'; //或者不要授予用戶的file權限
3.禁用drop命令
1
revoke drop on *.* from 'user'@'IP';
1)基本用戶定義函數(shù)是一類代碼,對MYSQL服務器功能進行擴充,通過添加新函數(shù),性質(zhì)就象使用本地MYSQL函數(shù)abs()或concat().UDF是用C(或C++)寫的。也許還可以用BASIC,.NET或其它什么雖然還沒見過有人這么做。
2)從字面上何以知道UDF是很有用的,尤其當需要擴展MYSQL服務器功能時。下表給出了最佳解決方法的比較:
Method Speed Language Development
方法 速度 語言 開發(fā)
Stored Procedures slow SQL ~minutes (for small functions)
存儲過程 慢 SQL ~分鐘(對于小函數(shù))
UDF fast C ~hour
UDF 快 C ~小時
Native Function fast C major pain in the ***
本地函數(shù) 快 C 未知
慢的意思是和其它比較時。存儲過程和一般SQL語句比仍然是很快的。
對本地函數(shù)的一點解釋:本質(zhì)上和UDF沒太大區(qū)別。但是必須用MYSQL的資源代碼來寫然后重新編譯全部。這將是很大的工作量,必須一邊又一邊的用最新版的MYSQL來完成這項工作。
3)這部分很簡單。當完成了一個UDF,只是使用它就可以了。例如:"SELECT MyFunction(data1, data2) FROM table"
4)編寫UDF
現(xiàn)在開發(fā)寫一個UDF:
建立一個新的shared-library項目(該例中用的VC++ 6.0建立一個標準的DLL)
首先需要一些頭文件。這些頭文件是標準的頭文件和MYSQL服務器的包含目錄里的文件
#ifdef STANDARD
/* STANDARD is defined, don't use any mysql functions */
#include
#include
#include
#ifdef __WIN__
typedef unsigned __int64 ulonglong; /* Microsofts 64 bit types */
typedef __int64 longlong;
#else
typedef unsigned long long ulonglong;
typedef long long longlong;
#endif /*__WIN__*/
#else
#include
#include
#endif
#include
#include
static pthread_mutex_t LOCK_hostname;
現(xiàn)在必須決定需要哪類函數(shù)。本質(zhì)上有兩種選擇:
該函數(shù)是聚合函數(shù)嗎?(后面將學習很多關于聚合函數(shù)的內(nèi)容)
返回類型是什么?有4個選擇:
類型 描述
STRING 一個合法的字符串,轉(zhuǎn)換成char*類型
INTEGER 一個普通的整型變量,轉(zhuǎn)換成64位的整型
REAL型 一個俘點數(shù),轉(zhuǎn)換成double型
DECIAML型 這個并沒真正的結(jié)束,MYSQL將做字符串對待
現(xiàn)在開始討論關于非聚合函數(shù)。必須聲明并執(zhí)行一些MYSQL使用UDF時用到的函數(shù),但首先一些必要的結(jié)構(gòu)必須并確:
UDF_INIT:
類型 名稱 描述
my_bool maybe_null 是1如果函數(shù)能返回NULL
unsigned int decimals 針對REAL函數(shù)
unsigned long max_length 針對字符串函數(shù)
char * ptr 自由指針針對函數(shù)的數(shù)據(jù)
my_bool const_item 0如果結(jié)果是獨立的
UDF_ARGS:
類型 名稱 描述
unsigned int arg_count 成員數(shù)量
enum Item_result * arg_type 成員類型的數(shù)組
char ** args 指向成員的指針的數(shù)組
unsigned long * lengths 成員長度的數(shù)組(針對字符串)
char * maybe_null "maybe_null"標記的數(shù)組
char ** attributes 指向成員屬性的指針的數(shù)組
unsigned long * attribute_lengths 屬性長度數(shù)組
現(xiàn)在看一下該函數(shù):
De-/Initialization:
Collapseextern "C" my_bool MyTest_init(UDF_INIT *initid, UDF_ARGS *args,
char *message)
{
//非常重要的一件事是建立內(nèi)存
//需要
//需要一個很長的變量來保存檢測數(shù)
//雖然該例中不需要
longlong* i = new longlong; // 建立變量
*i = 0; // 設初值
網(wǎng)站名稱:Mysql怎么禁用函數(shù) mysql怎么刪除函數(shù)
當前URL:http://muchs.cn/article40/hggiho.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、域名注冊、服務器托管、靜態(tài)網(wǎng)站、外貿(mào)建站、網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)