mysql函數存儲文件(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-tw/n/248012.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:24
下一篇 2024-12-12 13:24

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常問題的解決

    本文旨在解決vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常的問題,提供完整的代碼示例供參考。 一、分析問題 首先,需了解vue中下載文件的情況。一般情況下,我們…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 為什麼用cmd運行Java時需要在文件內打開cmd為中心

    在Java開發中,我們經常會使用cmd在命令行窗口運行程序。然而,有時候我們會發現,在運行Java程序時,需要在文件內打開cmd為中心,這讓很多開發者感到疑惑,那麼,為什麼會出現這…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29

發表回復

登錄後才能評論