国产中文字幕免费观看_国产高清精品软男同_日韩免费视频播放_亚洲午夜激情

聚集網(wǎng)(jujiwang.com) - 收錄免費(fèi)分類目錄信息軟文發(fā)布網(wǎng)址提交
免費(fèi)加入

探索 MySQL 存儲(chǔ)過程的進(jìn)階特性:自定義函數(shù)、表值參數(shù)和游標(biāo) (探索海洋的歐美動(dòng)畫片)

文章編號(hào):10759時(shí)間:2024-09-29人氣:


引言

存儲(chǔ)過程是 MySQL 中強(qiáng)大的工具,允許用戶封裝復(fù)雜的數(shù)據(jù)庫(kù)操作,提高可重用性和性能。除了基本特性外,MySQL 還提供了幾個(gè)進(jìn)階特性,進(jìn)一步增強(qiáng)了存儲(chǔ)過程的功能性。這些特性包括自定義函數(shù)、表值參數(shù)和游標(biāo)。本文將深入探討這些特性的用法和優(yōu)勢(shì)。

自定義函數(shù)

自定義函數(shù)允許用戶在存儲(chǔ)過程中創(chuàng)建自己的函數(shù),以便重復(fù)使用通用邏輯。這些函數(shù)可以接受參數(shù)並返回值。自定義函數(shù)的語法如下:```sqlCREATE FUNCTION function_name (parameter_list) RETURNS return_typeASBEGIN-- 函數(shù)體END```例如,以下自定義函數(shù)計(jì)算兩個(gè)數(shù)字的加法: sqlCREATE FUNCTION add_numbers (a INT, b INT) RETURNS INTASBEGINRETURN a + b;END```自定義函數(shù)可以在存儲(chǔ)過程中使用,就像內(nèi)置函數(shù)一樣:```sqlSELECT add_numbers(5, 10);```

表值參數(shù)

表值參數(shù)允許存儲(chǔ)過程接受或返回一個(gè)表作為參數(shù)。這對(duì)於處理大量數(shù)據(jù)或執(zhí)行復(fù)雜查詢非常有用。表值參數(shù)的語法如下:```sqlCREATE PROCEDURE procedure_name (IN|OUT|INOUT table_name TABLE)```例如,以下存儲(chǔ)過程使用表值參數(shù)將客戶信息批量插入數(shù)據(jù)庫(kù):```sqlCREATE PROCEDURE insert_customers (IN customers TABLE)ASBEGININSERT INTO customer (name, age, address)SELECT name, age, addressFROM customers;END```

游標(biāo)

游標(biāo)是用于遍歷結(jié)果集的機(jī)制。它們?cè)试S用戶逐行訪問數(shù)據(jù),并根據(jù)需要執(zhí)行操作。游標(biāo)的語法如下:```sqlDECLARE cursor_name CURSOR FOR SELECT_statement;OPEN cursor_name;FETCH cursor_name INTO variable_list;CLOSE cursor_name;```例如,以下存儲(chǔ)過程使用游標(biāo)來打印一個(gè)表中的所有客戶信息:```sqlCREATE PROCEDURE print_customersASBEGINDECLARE customer_cursor CURSOR FOR SELECT name, age, address FROM customer;OPEN customer_cursor;FETCH customer_cursor INTO customer_name, customer_age, customer_address;WHILE customer_name IS NOT NULL DOPRINT CONCAT(customer_name, ', ', customer_age, ', ', customer_address);FETCH customer_cursor INTO customer_name, customer_age, customer_address;END WHILE;CLOSE customer_cursor;END```

優(yōu)勢(shì)

使用這些進(jìn)階特性可以帶來以下優(yōu)勢(shì):代碼重用:自定義函數(shù)允許您將通用邏輯封裝為可重用的模塊。批量處理:表值參數(shù)可用于對(duì)大量數(shù)據(jù)執(zhí)行高效操作。靈活的遍歷:游標(biāo)提供了靈活的方式來遍歷結(jié)果集並逐行處理數(shù)據(jù)。提高性能:通過使用這些特性,您可以優(yōu)化存儲(chǔ)過程,減少執(zhí)行時(shí)間。

結(jié)論

MySQL 存儲(chǔ)過程中的自定義函數(shù)、表值參數(shù)和游標(biāo)是強(qiáng)大的工具,可顯著增強(qiáng)存儲(chǔ)過程的功能性。通過使用這些特性,您可以創(chuàng)建更靈活、更有效率的數(shù)據(jù)庫(kù)解決方案。

mysql 與oracle中的存儲(chǔ)過程及函數(shù)有什么區(qū)別,盡可能詳細(xì)哦

本質(zhì)上沒區(qū)別。 只是函數(shù)有如:只能返回一個(gè)變量的限制。 而存儲(chǔ)過程可以返回多個(gè)。 而函數(shù)是可以嵌入在sql中使用的,可以在select中調(diào)用,而存儲(chǔ)過程不行。 執(zhí)行的本質(zhì)都一樣。 函數(shù)限制比較多,比如不能用臨時(shí)表,只能用表變量.還有一些函數(shù)都不可用等等.而存儲(chǔ)過程的限制相對(duì)就比較少由于我現(xiàn)在基本上是DBA的工作,因此平時(shí)也看一些數(shù)據(jù)庫(kù)方面的書籍。 但是我一直對(duì)存儲(chǔ)過程和函數(shù)之間的區(qū)別掌握不透。 我向來認(rèn)為存儲(chǔ)過程可以實(shí)現(xiàn)的操作,函數(shù)也一樣可以實(shí)現(xiàn)。 最近,剛好大學(xué)的老師給我們上SQL-Server的課程,我對(duì)這個(gè)問題的疑惑終于慢慢解開。 今天晚上順便看了些網(wǎng)上的資料,覺得以下分析比較合理:1. 一般來說,存儲(chǔ)過程實(shí)現(xiàn)的功能要復(fù)雜一點(diǎn),而函數(shù)的實(shí)現(xiàn)的功能針對(duì)性比較強(qiáng)。 2. 對(duì)于存儲(chǔ)過程來說可以返回參數(shù),而函數(shù)只能返回值或者表對(duì)象。 3. 存儲(chǔ)過程一般是作為一個(gè)獨(dú)立的部分來執(zhí)行,而函數(shù)可以作為查詢語句的一個(gè)部分來調(diào)用,由于函數(shù)可以返回一個(gè)表對(duì)象,因此它可以在查詢語句中位于FROM關(guān)鍵字的后面。 4. 當(dāng)存儲(chǔ)過程和函數(shù)被執(zhí)行的時(shí)候,SQL Manager會(huì)到procedure cache中去取相應(yīng)的查詢語句,如果在procedure cache里沒有相應(yīng)的查詢語句,SQL Manager就會(huì)對(duì)存儲(chǔ)過程和函數(shù)進(jìn)行編譯。 Procedure cache中保存的是執(zhí)行計(jì)劃 (execution plan) ,當(dāng)編譯好之后就執(zhí)行procedure cache中的execution plan,之后SQL SERVER會(huì)根據(jù)每個(gè)execution plan的實(shí)際情況來考慮是否要在cache中保存這個(gè)plan,評(píng)判的標(biāo)準(zhǔn)一個(gè)是這個(gè)execution plan可能被使用的頻率;其次是生成這個(gè)plan的代價(jià),也就是編譯的耗時(shí)。 保存在cache中的plan在下次執(zhí)行時(shí)就不用再編譯了。 存儲(chǔ)過程和用戶自定義函數(shù)具體的區(qū)別存儲(chǔ)過程存儲(chǔ)過程可以使得對(duì)數(shù)據(jù)庫(kù)的管理、以及顯示關(guān)于數(shù)據(jù)庫(kù)及其用戶信息的工作容易得多。 存儲(chǔ)過程是 SQL 語句和可選控制流語句的預(yù)編譯集合,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理。 存儲(chǔ)過程存儲(chǔ)在數(shù)據(jù)庫(kù)內(nèi),可由應(yīng)用程序通過一個(gè)調(diào)用執(zhí)行,而且允許用戶聲明變量、有條件執(zhí)行以及其它強(qiáng)大的編程功能。 存儲(chǔ)過程可包含程序流、邏輯以及對(duì)數(shù)據(jù)庫(kù)的查詢。 它們可以接受參數(shù)、輸出參數(shù)、返回單個(gè)或多個(gè)結(jié)果集以及返回值。 可以出于任何使用 SQL 語句的目的來使用存儲(chǔ)過程,它具有以下優(yōu)點(diǎn):可以在單個(gè)存儲(chǔ)過程中執(zhí)行一系列 SQL 語句。 可以從自己的存儲(chǔ)過程內(nèi)引用其它存儲(chǔ)過程,這可以簡(jiǎn)化一系列復(fù)雜語句。 存儲(chǔ)過程在創(chuàng)建時(shí)即在服務(wù)器上進(jìn)行編譯,所以執(zhí)行起來比單個(gè) SQL 語句快。 用戶定義函數(shù)函數(shù)是由一個(gè)或多個(gè) Transact-SQL 語句組成的子程序,可用于封裝代碼以便重新使用。 Microsoft? SQL Server? 2000 并不將用戶限制在定義為 Transact-SQL 語言一部分的內(nèi)置函數(shù)上,而是允許用戶創(chuàng)建自己的用戶定義函數(shù)。 可使用 CREATE FUNCTION 語句創(chuàng)建、使用 ALTER FUNCTION 語句修改、以及使用 DROP FUNCTION 語句除去用戶定義函數(shù)。 每個(gè)完全合法的用戶定義函數(shù)名 (database___name) 必須唯一。 必須被授予 CREATE FUNCTION 權(quán)限才能創(chuàng)建、修改或除去用戶定義函數(shù)。 不是所有者的用戶在 Transact-SQL 語句中使用某個(gè)函數(shù)之前,必須先給此用戶授予該函數(shù)的適當(dāng)權(quán)限。 若要?jiǎng)?chuàng)建或更改在 CHECK 約束、DEFAULT 子句或計(jì)算列定義中引用用戶定義函數(shù)的表,還必須具有函數(shù)的 REFERENCES 權(quán)限。 函數(shù)中的有效語句類型包括:DECLARE 語句,該語句可用于定義函數(shù)局部的數(shù)據(jù)變量和游標(biāo)。 為函數(shù)局部對(duì)象賦值,如使用 SET 給標(biāo)量和表局部變量賦值。 游標(biāo)操作,該操作引用在函數(shù)中聲明、打開、關(guān)閉和釋放的局部游標(biāo)。 不允許使用 FETCH 語句將數(shù)據(jù)返回到客戶端。 僅允許使用 FETCH 語句通過 INTO 子句給局部變量賦值。 控制流語句。 SELECT 語句,該語句包含帶有表達(dá)式的選擇列表,其中的表達(dá)式將值賦予函數(shù)的局部變量。 INSERT、UPDATE 和 DELETE 語句,這些語句修改函數(shù)的局部 table 變量。 EXECUTE 語句,該語句調(diào)用擴(kuò)展存儲(chǔ)過程。 在查詢中指定的函數(shù)的實(shí)際執(zhí)行次數(shù)在優(yōu)化器生成的執(zhí)行計(jì)劃間可能不同。 示例為 WHERE 子句中的子查詢喚醒調(diào)用的函數(shù)。 子查詢及其函數(shù)執(zhí)行的次數(shù)會(huì)因優(yōu)化器選擇的訪問路徑而異

數(shù)據(jù)庫(kù)的存儲(chǔ)過程,函數(shù),觸發(fā)器,游標(biāo),視圖,索引等內(nèi)容講解

子程序

子程序包括存儲(chǔ)過程、自定義函數(shù)、游標(biāo)、觸發(fā)器。 可以被編譯和存儲(chǔ)在數(shù)據(jù)庫(kù)中,它具有模塊化、重用性、可維護(hù)性、可擴(kuò)展性、安全性等特點(diǎn)。 其目的是完成特定的功能,能被程序和客戶端工具直接調(diào)用。 子程序也屬于數(shù)據(jù)庫(kù)對(duì)象,可以被授權(quán)能否執(zhí)行。

存儲(chǔ)過程

存儲(chǔ)過程是一種存儲(chǔ)復(fù)雜程序,方便外部程序調(diào)用的數(shù)據(jù)庫(kù)對(duì)象。 是為了完成某個(gè)特定功能的 SQL 語句集合,用戶可以通過存儲(chǔ)過程的名字和參數(shù)進(jìn)行調(diào)用。 MySQL 從 5.0 版本開始支持存儲(chǔ)過程(Stored Procedure)。

創(chuàng)建和刪除存儲(chǔ)過程

創(chuàng)建存儲(chǔ)過程,其關(guān)鍵語法如下:

CREATE PROCEDURE 存儲(chǔ)過程名([IN|OUT|INOUT] 參數(shù)名 數(shù)據(jù)類型)BEGIN……END

對(duì)存儲(chǔ)過程進(jìn)行參數(shù)定義時(shí),多個(gè)參數(shù)用?,?分割,共有三種參數(shù)類型:IN,OUT,INOUT:

IN: 參數(shù)的值必須在調(diào)用存儲(chǔ)過程時(shí)指定,在存儲(chǔ)過程中修改該參數(shù)的值不會(huì)影響調(diào)用環(huán)境的數(shù)據(jù)值;

OUT: 該值可在存儲(chǔ)過程內(nèi)部被改變,同時(shí)引起調(diào)用環(huán)境中數(shù)據(jù)值的改變;(有out需要 @變量 接收)

INOUT: 調(diào)用時(shí)指定,兼具?IN?和?OUT?類型參數(shù)的特點(diǎn)。

以?BEGIN?和?END?對(duì)過程體的開始和結(jié)束進(jìn)行標(biāo)識(shí)。

MySQL

需要強(qiáng)調(diào)一點(diǎn),MySQL 中存儲(chǔ)過程默認(rèn)以?;?作為結(jié)束符,如果不改變結(jié)束符,編譯器會(huì)把存儲(chǔ)過程當(dāng)成 SQL 語句進(jìn)行處理,因此編譯過程會(huì)報(bào)錯(cuò)。 所以要事先用?DELIMITER //?聲明當(dāng)前的分隔符,其目的是讓編譯器把兩個(gè)?//?之間的內(nèi)容當(dāng)作一個(gè)存儲(chǔ)過程,使用?DELIMITER ;?則恢復(fù)結(jié)束符為?;?。

刪除存儲(chǔ)過程使用?DROP PROCEDURE?語句,其語法如下:

DROP PROCEDURE 存儲(chǔ)過程名;函數(shù)

自定義函數(shù)是一種對(duì) MySQL 的擴(kuò)展,其用法和內(nèi)置函數(shù)相同。 在前面文章,我們使用的函數(shù)是 MySQL 內(nèi)置函數(shù)(已經(jīng)寫好的),直接調(diào)用即可完成某個(gè)特定功能,下面將會(huì)介紹 MySQL 自定義函數(shù)。

創(chuàng)建和刪除自定義函數(shù)

創(chuàng)建自定義函數(shù)使用?CREATE FUNCTION?語句,語法如下:

CREATE FUNCTION 函數(shù)名([變量名1 變量類型1, ……, 變量名n 變量類型n]) RETURNS 數(shù)據(jù)類型BEGINsql語句;RETURN 值;END;

MySQL 安裝完成后默認(rèn)不允許創(chuàng)建自定義函數(shù),需要在??配置文件中增加?log-bin-trust-FUNCTION-creators=1,然后重啟數(shù)據(jù)庫(kù),使其具有創(chuàng)建函數(shù)的權(quán)限。 也可以在 MySQL 命令行中輸入以下命令來解決。 ?SET GLOBAL log_bin_trust_function_creators = 1;。

刪除自定義函數(shù)使用?DROP FUNCTION?語句,其語法如下:

DROP FUNCTION 函數(shù)名;

需要注意,刪除自定義函數(shù)時(shí),函數(shù)名后面不能加括號(hào)

游標(biāo)

游標(biāo)(CURSOR)是一個(gè)存儲(chǔ)在 MySQL 服務(wù)器上面的數(shù)據(jù)庫(kù)查詢機(jī)制,類似于數(shù)組的下標(biāo)。 使用游標(biāo)后,可以逐步提取查詢結(jié)果。

使用游標(biāo)需要注意以下幾點(diǎn):

聲明游標(biāo)之后,必須先打開游標(biāo)才能使用;

在游標(biāo)結(jié)束之后,要關(guān)閉游標(biāo)。

其使用的基本步驟如下:

聲明游標(biāo),其語法如下;

declare 游標(biāo)名 cursor for select_statement

打開游標(biāo)

open 游標(biāo)名

從游標(biāo)中取值,使用 fetch 進(jìn)行取值,語法如下:

fetch 游標(biāo)名 into var1,var2,……

利用fetch將取到的一條記錄中的字段賦值給多個(gè)變量。

關(guān)閉游標(biāo)

close 游標(biāo)名觸發(fā)器(TRIGGER)

是一種特殊的存儲(chǔ)過程,它在插入、修改或刪除表中的數(shù)據(jù)時(shí)觸發(fā)執(zhí)行,擁有更精細(xì)、更復(fù)雜的數(shù)據(jù)控制能力。 MySQL 從 5.0 版本開始支持觸發(fā)器。

舉個(gè)例子,現(xiàn)有用戶表和日志表。 當(dāng)一個(gè)用戶被創(chuàng)建時(shí),我們用日志來記錄用戶的創(chuàng)建過程。 如果不使用觸發(fā)器,則需要手動(dòng)編寫程序來實(shí)現(xiàn);而一旦使用觸發(fā)器,我們可以在信息插入用戶表后,立刻觸發(fā)對(duì)日志表的操作,使其記錄創(chuàng)建用戶的信息。

創(chuàng)建和刪除觸發(fā)器

創(chuàng)建觸發(fā)器的語法如下:

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_statement;

參數(shù)解釋:

trigger_name:觸發(fā)器名稱,自己定義;

trigger_time:觸發(fā)時(shí)機(jī),只有兩個(gè)值,before(某事件之前),after(某事件之后);

trigger_event:觸發(fā)事件,取值 INSERT(插入)、UPDATE(更新)、DELETE(刪除);

table_name:需要建立觸發(fā)器的表名;

trigger_statement:觸發(fā)器程序體,一條 SQL 語句或存儲(chǔ)過程等;

查看觸發(fā)器

使用?SHOW TRIGGERS;?命令查看所有觸發(fā)器,因?yàn)橛|發(fā)器有自己的保存機(jī)制,顯示出來的信息量比較大

刪除觸發(fā)器使用的語法如下:

DROP TRIGGER 觸發(fā)器名;視圖 表值參數(shù)和游標(biāo)

視圖是從一個(gè)或多個(gè)表中糅合出來的虛擬表。 一個(gè)視圖并不包含真實(shí)的數(shù)據(jù),它提供了另一個(gè)視角去查看或改變表中的數(shù)據(jù)。

打個(gè)比喻:把視圖想象成一扇窗戶,通過窗戶往里看,我們只能看到一部分,而這部分就是數(shù)據(jù)庫(kù)系統(tǒng)允許你看到的數(shù)據(jù)。 而不允許你看到的內(nèi)容會(huì)被遮擋住,讓你不可見。

使用視圖可以提高我們對(duì)數(shù)據(jù)的操作效率,同時(shí)增加安全性:

提高效率:將經(jīng)常使用復(fù)雜查詢定義為視圖,由于對(duì)視圖的權(quán)限、語法解析都會(huì)被存儲(chǔ),就避免了重復(fù)解析;

增加數(shù)據(jù)安全性:通過視圖,用戶只能查詢和更改指定的數(shù)據(jù);

總之,使用視圖的主要作用就是保障數(shù)據(jù)的安全性,同時(shí)提高查詢效率。

創(chuàng)建視圖

創(chuàng)建視圖使用的語句是?CREATE View,完整語法看上去比較復(fù)雜,大家可以到官網(wǎng)上去查看。

DROP PROCEDURE 存儲(chǔ)過程名;0查詢視圖

視圖是一種虛擬的表,也符合 DQL 操作,視圖的查詢和表的查詢相同,查看 city_VIEW 視圖中的所有數(shù)據(jù),其 SQL 語句如下:

DROP PROCEDURE 存儲(chǔ)過程名;1刪除視圖

使用?DELETE FROM?子句可以刪除視圖,其語法如下:

DROP PROCEDURE 存儲(chǔ)過程名;2更新視圖數(shù)據(jù)

把 id 為 2 的城市人口更新為 。其 SQL 語句如下:

DROP PROCEDURE 存儲(chǔ)過程名;3

查看視圖和基表,結(jié)果如下:

DROP PROCEDURE 存儲(chǔ)過程名;4

查看基表數(shù)據(jù)如下:

DROP PROCEDURE 存儲(chǔ)過程名;5插入視圖數(shù)據(jù)

給視圖插入數(shù)據(jù)和表插入數(shù)據(jù)一樣,使用?INSERT INTO?語句,我們?cè)谝晥D中插入一條 id 為 4080,名字為?test?,人口數(shù)量為 500 的記錄,其 SQL 語句如下:

DROP PROCEDURE 存儲(chǔ)過程名;6序列

前面我們?cè)诮榻B主鍵的時(shí)候知道,主鍵必須是唯一的。 為了方便管理主鍵同時(shí)滿足主鍵唯一性要求,我們把主鍵設(shè)置為自增長(zhǎng)。 實(shí)現(xiàn)自增長(zhǎng)需要用到序列。

序列就是一組有特定變化規(guī)律的整數(shù),其最主要的用途就是創(chuàng)建主鍵,確保主鍵的唯一性。 序列是一個(gè)數(shù)據(jù)庫(kù)對(duì)象,獨(dú)立于表進(jìn)行存儲(chǔ),可以為多個(gè)表使用。

目前 MySQL 是不支持類似建表或視圖的方式來直接創(chuàng)建序列對(duì)象(Oracle 支持)。 雖然有?auto_increment?來實(shí)現(xiàn)自增長(zhǎng),但不能設(shè)置步長(zhǎng)、起始值、是否循環(huán)等。 最重要的是,在 MySQL 中一張表只能有一個(gè)字段設(shè)置為自增長(zhǎng),如果我們需要兩個(gè)或以上的字段實(shí)現(xiàn)自增長(zhǎng)該怎么辦呢? 需要做一些間接處理。

新建表時(shí)設(shè)置起始值

下面我們?cè)?demo 數(shù)據(jù)庫(kù)下新創(chuàng)建一個(gè)表 demo2:

DROP PROCEDURE 存儲(chǔ)過程名;7

插入新的值:

DROP PROCEDURE 存儲(chǔ)過程名;8

可以看到起始值為 1000。

創(chuàng)建表后設(shè)置起始值

修改 demo2 表的起始值為 1500:

DROP PROCEDURE 存儲(chǔ)過程名;9

這時(shí)如果再插入新值:

CREATE FUNCTION 函數(shù)名([變量名1 變量類型1, ……, 變量名n 變量類型n]) RETURNS 數(shù)據(jù)類型BEGINsql語句;RETURN 值;END;0

可以看到新的 id 起始值已經(jīng)變?yōu)?1500 了 使用?AUTO_INCREMENT?屬性時(shí)我們需要注意:

每一個(gè)表中只能有一個(gè)?AUTO_INCREMENT?列

同時(shí)該列必須要有?NOT NULL?屬性來進(jìn)行約束,在 MySQL 中會(huì)自動(dòng)將?NOT NULL?約束隱式添加到列中。

AUTO_INCREMENT?列必需建立索引,可以為?PRIMARY KEY?或?UNIQUE?索引。

AUTO_INCREMENT?列具有以下屬性:

默認(rèn)起始值為 1,當(dāng)在該列中插入?NULL?值或是在?INSERT?語句中忽略該值時(shí),它的起始值將會(huì)自增 1。

如果使用?DELETE?語句刪除最后插入的行,則 MySQL 可能會(huì)也可能不會(huì)重復(fù)使用刪除的序列號(hào),具體取決于表的存儲(chǔ)引擎。 如 MySQL 默認(rèn)的?InnoDB?就不會(huì)重用序列號(hào)。

如果使用?UPDATE?語句將?AUTO_INCREMENT?列中的值更新為已經(jīng)存在的值,且該列具有唯一索引,則 MySQL 將發(fā)出重復(fù)鍵錯(cuò)誤。

獲得最后生成的序列號(hào)可以使用?LAST_INSERT_ID()?函數(shù)。

索引

所有數(shù)據(jù)操作可簡(jiǎn)單分為讀操作(獲取數(shù)據(jù))和寫操作(插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù))。 一般情況下,讀寫比例在 10:1 左右,大量的讀操作給數(shù)據(jù)庫(kù)性能帶來不小的考驗(yàn)。 因此,對(duì)查詢語句的優(yōu)化是重中之重,優(yōu)化的關(guān)鍵就是利用好索引。

索引在 MySQL 中又叫作?鍵?,英文名?key?,是存儲(chǔ)引擎用于快速找到記錄的一種數(shù)據(jù)結(jié)構(gòu)。 索引對(duì)于性能的提升非常關(guān)鍵,尤其是當(dāng)表中的數(shù)據(jù)量越來越龐大的時(shí)候。 我們前面介紹約束使用到的?primary key?,其實(shí)就是一種索引,叫做主鍵索引。

舉個(gè)簡(jiǎn)單的例子:我們把數(shù)據(jù)庫(kù)比作漢語字典,那么索引就是這本字典的音序表,通過音序表可以快速查找到需要的漢字。 索引的目的就是為了提高查詢效率。 在 MySQL 中常用的索引可以分為三類,分別是:普通索引、唯一索引、聯(lián)合索引。

普通索引

普通索引使用關(guān)鍵字 INDEX 定義,根據(jù)建立索引的時(shí)機(jī)不同,書寫方式有細(xì)微差別。分為以下 3 種情況:

創(chuàng)建表的時(shí)候創(chuàng)建索引;

創(chuàng)建表后創(chuàng)建索引;

修改表的時(shí)候添加索引。

唯一索引

唯一索引不僅加速查找,還具有約束性。

主鍵索引?primary key

唯一鍵索引?unique

聯(lián)合索引

聯(lián)合索引即為索引同時(shí)設(shè)置多個(gè)字段。

primary key(id,name),聯(lián)合主鍵索引

index(id,name),聯(lián)合普通索引 在建表的時(shí)候創(chuàng)建索引。其語法如下:

CREATE FUNCTION 函數(shù)名([變量名1 變量類型1, ……, 變量名n 變量類型n]) RETURNS 數(shù)據(jù)類型BEGINsql語句;RETURN 值;END;1

給已經(jīng)存在的表中某字段添加索引,其語法如下:

CREATE FUNCTION 函數(shù)名([變量名1 變量類型1, ……, 變量名n 變量類型n]) RETURNS 數(shù)據(jù)類型BEGINsql語句;RETURN 值;END;2

修改表時(shí)創(chuàng)建索引,其語法如下:

ALTER TABLE 表名 ADD CREATE FUNCTION 函數(shù)名([變量名1 變量類型1, ……, 變量名n 變量類型n]) RETURNS 數(shù)據(jù)類型BEGINsql語句;RETURN 值;END;1

查看索引,借助表信息查看表中是否存在索引,其語法如下:

CREATE FUNCTION 函數(shù)名([變量名1 變量類型1, ……, 變量名n 變量類型n]) RETURNS 數(shù)據(jù)類型BEGINsql語句;RETURN 值;END;4

查看 teacher 表中的索引,其 SQL 語句如下:

CREATE FUNCTION 函數(shù)名([變量名1 變量類型1, ……, 變量名n 變量類型n]) RETURNS 數(shù)據(jù)類型BEGINsql語句;RETURN 值;END;5

刪除索引,使用的關(guān)鍵字是DROP INDEX … on …,其語法如下:

CREATE FUNCTION 函數(shù)名([變量名1 變量類型1, ……, 變量名n 變量類型n]) RETURNS 數(shù)據(jù)類型BEGINsql語句;RETURN 值;END;6原文:

相關(guān)標(biāo)簽: 探索存儲(chǔ)過程的進(jìn)階特性MySQL探索海洋的歐美動(dòng)畫片自定義函數(shù)表值參數(shù)和游標(biāo)

上一篇:MySQL存儲(chǔ)過程與觸發(fā)器協(xié)同工作以實(shí)現(xiàn)數(shù)據(jù)

下一篇:使用MySQL存儲(chǔ)過程加速數(shù)據(jù)處理批量操作復(fù)

內(nèi)容聲明:

1、本站收錄的內(nèi)容來源于大數(shù)據(jù)收集,版權(quán)歸原網(wǎng)站所有!
2、本站收錄的內(nèi)容若侵害到您的利益,請(qǐng)聯(lián)系我們進(jìn)行刪除處理!
3、本站不接受違法信息,如您發(fā)現(xiàn)違法內(nèi)容,請(qǐng)聯(lián)系我們進(jìn)行舉報(bào)處理!
4、本文地址:http://www.hudongshop.com/article/fd8cb9de11c600cf3fb7.html,復(fù)制請(qǐng)保留版權(quán)鏈接!


溫馨小提示:在您的網(wǎng)站做上本站友情鏈接,訪問一次即可自動(dòng)收錄并自動(dòng)排在本站第一位!
隨機(jī)文章
在異常處理中使用 Try-Catch 塊的綜合指南 (在異常處理中,如釋放資源,關(guān)閉文件等由( )來完成)

在異常處理中使用 Try-Catch 塊的綜合指南 (在異常處理中,如釋放資源,關(guān)閉文件等由( )來完成)

簡(jiǎn)介異常處理是編程中處理和管理意外錯(cuò)誤的關(guān)鍵,在JavaScript中,可以使用try,catch塊來捕獲和處理異常,Try,Catch塊try,catch塊是一個(gè)代碼塊,用于捕獲和處理異常,它的語法如下,javascripttry,要嘗試運(yùn)行的代碼,catch,e,如果出現(xiàn)異常,則處理異常的代碼,try塊包含要嘗試運(yùn)行的代...。

本站公告 2024-09-27 17:01:20

netlib:連接數(shù)學(xué)家和尋求解決方案的研究人員 (NetLibrary)

netlib:連接數(shù)學(xué)家和尋求解決方案的研究人員 (NetLibrary)

簡(jiǎn)介Netlib,網(wǎng)絡(luò)庫(kù),是一個(gè)在線資源,提供經(jīng)過同行評(píng)審的數(shù)學(xué)軟件、文檔和數(shù)據(jù)集,它是由田納西大學(xué)在1980年代創(chuàng)建的,旨在為數(shù)學(xué)家和使用數(shù)學(xué)解決問題的研究人員提供一個(gè)協(xié)作平臺(tái),目標(biāo)Netlib的主要目標(biāo)是,為數(shù)學(xué)家提供一個(gè)分享和訪問軟件的平臺(tái)為研究人員提供訪問和使用數(shù)學(xué)解決問題的工具促進(jìn)數(shù)學(xué)研究與應(yīng)用之間的協(xié)作內(nèi)容Netlib提供...。

最新資訊 2024-09-26 18:36:17

從Library.nu獲取您最喜歡的書籍,無需支付任何費(fèi)用 (從library)

從Library.nu獲取您最喜歡的書籍,無需支付任何費(fèi)用 (從library)

Library.nu是一個(gè)免費(fèi)電子書庫(kù),提供廣泛的書籍選擇,包括小說、非小說、教科書等,Library.nu的優(yōu)勢(shì)免費(fèi),所有書籍均可免費(fèi)下載,廣泛的選擇,Library.nu擁有超過700萬本電子書,涵蓋多種類別,多種格式,書籍提供多種格式,包括EPUB、MOBI、PDF和其他格式,易于使用,Library.nu的界面簡(jiǎn)單易用,方便您...。

本站公告 2024-09-26 15:50:38

NumPy with Pandas: An Introduction to Data Manipulation and Analysis in Python (numpy無法導(dǎo)入)

NumPy with Pandas: An Introduction to Data Manipulation and Analysis in Python (numpy無法導(dǎo)入)

簡(jiǎn)介NumPy和Pandas是用于Python數(shù)據(jù)操作和分析的兩個(gè)強(qiáng)大的庫(kù),NumPy擅長(zhǎng)處理多維數(shù)組,而Pandas則擅長(zhǎng)處理表格數(shù)據(jù),數(shù)據(jù)框,結(jié)合使用,您可以高效地操縱和分析大型數(shù)據(jù)集,NumPyNumPy是一個(gè)用于科學(xué)計(jì)算的Python庫(kù),它提供了高效的多維數(shù)組操作,線性代數(shù)和隨機(jī)數(shù)生成等功能,導(dǎo)入NumPy```python...。

技術(shù)教程 2024-09-24 21:59:37

獲取免費(fèi)資源,開啟您的成功之旅 (獲取免費(fèi)資源的網(wǎng)站)

獲取免費(fèi)資源,開啟您的成功之旅 (獲取免費(fèi)資源的網(wǎng)站)

歡迎來到免費(fèi)資源寶庫(kù)!我們整理了以下網(wǎng)站,提供您各種領(lǐng)域的免費(fèi)學(xué)習(xí)資源,助您邁向成功之路,線上課程Coursera,與頂尖大學(xué)合作,提供互動(dòng)式線上課程,edX,由哈佛大學(xué)等名校創(chuàng)立,提供線上學(xué)位、學(xué)分課程和微課程,Udacity,專注於技術(shù)技能培訓(xùn),提供程式設(shè)計(jì)、資料科學(xué)等領(lǐng)域的課程,可汗學(xué)院,非營(yíng)利組織,提供數(shù)學(xué)、科學(xué)、歷史等科目的...。

技術(shù)教程 2024-09-23 22:38:11

自定義報(bào)告:使用直觀的報(bào)告設(shè)計(jì)器輕松定制報(bào)告布局、格式和內(nèi)容,以滿足特定的業(yè)務(wù)需求。(自定義報(bào)告生成)

自定義報(bào)告:使用直觀的報(bào)告設(shè)計(jì)器輕松定制報(bào)告布局、格式和內(nèi)容,以滿足特定的業(yè)務(wù)需求。(自定義報(bào)告生成)

自定義報(bào)告生成工具為您提供了一個(gè)直觀的報(bào)告設(shè)計(jì)器,使您能夠輕松地定制報(bào)告布局、格式和內(nèi)容,以滿足您的特定業(yè)務(wù)需求,自定義報(bào)告的好處提高報(bào)告準(zhǔn)確性和相關(guān)性節(jié)省時(shí)間和精力,因?yàn)闊o需手動(dòng)創(chuàng)建報(bào)告加強(qiáng)決策制定,因?yàn)閳?bào)告提供定制的見解改善溝通和協(xié)作,因?yàn)閳?bào)告可以輕松共享自定義報(bào)告設(shè)計(jì)器自定義報(bào)告設(shè)計(jì)器是一個(gè)用戶友好的界面,使您能夠毫不費(fèi)力地創(chuàng)建...。

技術(shù)教程 2024-09-14 17:42:58

提交更改:解鎖改進(jìn)和更新的無縫體驗(yàn) (更改解釋)

提交更改:解鎖改進(jìn)和更新的無縫體驗(yàn) (更改解釋)

能需要幾分鐘到半小時(shí),更新過程中我的數(shù)據(jù)會(huì)受到影響嗎,否,您的數(shù)據(jù)在更新期間不會(huì)受到影響,我可以在更新后取消更改嗎,通常情況下,在更新后無法取消更改,建議在提交更改之前仔細(xì)考慮,如果更新出現(xiàn)問題怎么辦,如果您在更新過程中遇到問題,請(qǐng)聯(lián)系您的設(shè)備制造商或技術(shù)支持團(tuán)隊(duì),結(jié)論提交更改以解鎖改進(jìn)和更新的無縫體驗(yàn),通過提升性能、增強(qiáng)安全性和優(yōu)化...。

最新資訊 2024-09-14 07:01:58

深入了解 Java 虛擬機(jī) (JVM) 的下載過程 (深入了解計(jì)算機(jī))

深入了解 Java 虛擬機(jī) (JVM) 的下載過程 (深入了解計(jì)算機(jī))

Java虛擬機(jī),JVM,是Java應(yīng)用程序運(yùn)行時(shí)執(zhí)行代碼的虛擬環(huán)境,它是Java編程語言的關(guān)鍵組件,允許Java代碼在不同的操作系統(tǒng)和硬件平臺(tái)上運(yùn)行,下載JVM的步驟下載JVM的過程通常包括以下幾個(gè)步驟,1.確定您的操作系統(tǒng)和架構(gòu)在下載JVM之前,您需要確定您的操作系統(tǒng)和架構(gòu),JVM有適用于不同操作系統(tǒng)和架構(gòu)的版本,包括Windows...。

最新資訊 2024-09-12 03:43:02

優(yōu)化 Java 遞歸函數(shù)的性能:避免堆棧溢出和提高效率 (優(yōu)化Java)

優(yōu)化 Java 遞歸函數(shù)的性能:避免堆棧溢出和提高效率 (優(yōu)化Java)

Java的遞歸函數(shù)是一種強(qiáng)大的工具,可以通過不斷調(diào)用自身來解決復(fù)雜問題,如果設(shè)計(jì)不當(dāng),遞歸函數(shù)可能會(huì)導(dǎo)致堆棧溢出或效率低下,避免堆棧溢出堆棧溢出發(fā)生在函數(shù)調(diào)用的數(shù)量超過Java虛擬機(jī),JVM,為每個(gè)線程分配的堆棧空間時(shí),這通常是由無限遞歸或遞歸深度過大引起的,解決堆棧溢出的方法增加堆棧大小,可以通過使用,Xss命令行選項(xiàng)增加Java程...。

互聯(lián)網(wǎng)資訊 2024-09-12 02:59:57

提高效率:PHP 建站系統(tǒng)自動(dòng)化了許多開發(fā)任務(wù),例如內(nèi)容管理、用戶管理和模板引擎,從而提高了開發(fā)效率。(提高效率PPT)

提高效率:PHP 建站系統(tǒng)自動(dòng)化了許多開發(fā)任務(wù),例如內(nèi)容管理、用戶管理和模板引擎,從而提高了開發(fā)效率。(提高效率PPT)

PHP建站系統(tǒng)是一個(gè)用于創(chuàng)建和管理網(wǎng)站的強(qiáng)大工具,它提供了許多開箱即用的功能,可以幫助您提高開發(fā)效率,這些功能包括,內(nèi)容管理,PHP建站系統(tǒng)提供了用于管理網(wǎng)站內(nèi)容的強(qiáng)大工具,您可以輕松地添加、編輯和刪除頁(yè)面和帖子,用戶管理,PHP建站系統(tǒng)還提供了用于管理網(wǎng)站用戶的強(qiáng)大工具,您可以輕松地創(chuàng)建和管理用戶帳戶,并分配權(quán)限,模板引擎,PHP建...。

本站公告 2024-09-12 02:20:44

PHP 下載教程:無縫獲取和安裝 PHP (php如何下載)

PHP 下載教程:無縫獲取和安裝 PHP (php如何下載)

PHP是什么,PHP是一種廣泛使用的服務(wù)器端編程語言,用于開發(fā)動(dòng)態(tài)網(wǎng)站和應(yīng)用程序,它以其易用性、強(qiáng)大的功能和廣泛的社區(qū)支持而聞名,下載PHP官方網(wǎng)站從PHP官方網(wǎng)站下載PHP是最安全、最可靠的方法,訪問PHP官方網(wǎng)站,單擊,下載,菜單,選擇與您的操作系統(tǒng)和架構(gòu),32位或64位,相對(duì)應(yīng)的版本,單擊,下載,按鈕,包管理器如果您的操作系統(tǒng)支...。

最新資訊 2024-09-07 22:23:31

提升您的 JavaScript 技能,使用這些令人驚嘆的特效 (提升您的用戶體驗(yàn)要填嗎)

提升您的 JavaScript 技能,使用這些令人驚嘆的特效 (提升您的用戶體驗(yàn)要填嗎)

JavaScript是當(dāng)今網(wǎng)絡(luò)開發(fā)中最流行的編程語言之一,它是一種功能強(qiáng)大的語言,可用于為您的網(wǎng)站和應(yīng)用程序創(chuàng)建交互式和響應(yīng)式體驗(yàn),如果您有興趣提高您對(duì)JavaScript的技能,那么學(xué)習(xí)使用特效是一個(gè)很好的方法,特效可以幫助您創(chuàng)建直觀且引人入勝的界面,從而提升您的用戶體驗(yàn),有很多不同的JavaScript特效可供使用,一些最流行的包...。

最新資訊 2024-09-05 11:19:55

Copyright ? 2025 聚集網(wǎng) All Rights Reserved
此內(nèi)容系本站根據(jù)來路自動(dòng)抓取的結(jié)果,不代表本站贊成被顯示網(wǎng)站的內(nèi)容或立場(chǎng)。
本頁(yè)閱讀量次 | 本站總訪問次 | 本站總訪客人 | 今日總訪問次 | 今日總訪客人 | 昨日總訪問次 | 昨日總訪客人 |
技術(shù)支持:聚集網(wǎng)

国产中文字幕免费观看_国产高清精品软男同_日韩免费视频播放_亚洲午夜激情
国产精品区免费视频| 在线视频一二三区| 欧美黄色免费影院| 一本久久a久久精品vr综合| 久久99精品国产一区二区三区| 97精品国产97久久久久久春色| 国产欧美日韩精品丝袜高跟鞋| 国产一区二区视频播放| 麻豆91av| 国产欧美va欧美va香蕉在线| 国产精品一区二区三| 99视频在线免费| 国产精品69页| 久久99导航| 精品国产欧美一区二区五十路| 久久久久久九九九九| 日韩亚洲一区二区| 国产精品男人爽免费视频1| 国产精品免费久久久久久| 色老头一区二区三区在线观看| 久久久人成影片一区二区三区观看| 97国产精品久久| 国产乱人伦真实精品视频| 人人干视频在线| 欧美婷婷久久| 欧美高清一区二区| 黄色www网站| 欧美极品欧美精品欧美| 人人干视频在线| 欧美在线www| 欧美亚洲午夜视频在线观看| 欧美性受xxxx黑人猛交| 狠狠色噜噜狠狠狠狠色吗综合| 国语对白做受xxxxx在线中国| 青青草原一区二区| 日韩日韩日韩日韩日韩| 日本免费高清一区二区| 青草青草久热精品视频在线观看| 欧美这里只有精品| 免费看欧美一级片| 国产精品一区二| 99久久免费观看| 久久天天东北熟女毛茸茸| 国产成人永久免费视频| 日韩视频―中文字幕| 国产精品欧美激情在线观看| 久久亚洲国产精品成人av秋霞| 久久国产精品免费视频| 亚洲字幕一区二区| 亚洲一区二区三区777| 亚洲va久久久噜噜噜久久狠狠 | 视频在线精品一区| 日韩欧美一区二区三区四区五区 | 欧美精品国产精品久久久| 蜜桃精品久久久久久久免费影院| 国产日本欧美在线| 99www免费人成精品| 久久66热这里只有精品| 国产精品天天av精麻传媒| 精品自拍视频在线观看| 日日噜噜夜夜狠狠久久丁香五月 | 国产精品久久精品| 亚洲一区二区三区av无码| 欧美一级中文字幕| 欧美影视一区二区| 欧美日韩精品中文字幕一区二区| 国产一级做a爰片久久毛片男| 91久久久在线| 日韩在线视频线视频免费网站| 国产精品黄页免费高清在线观看| 欧美激情一区二区久久久| 日韩高清国产精品| 爱福利视频一区二区| 国产成人精品在线观看| 亚洲一区二区在线| 免费观看精品视频| 国产ts一区二区| 自拍另类欧美| 日韩高清国产一区在线观看 | 国产中文欧美精品| 久久久久久有精品国产| 欧美精品午夜视频| 日本黄网站免费| 不卡日韩av| 另类色图亚洲色图| 欧美在线视频一区| 91九色国产视频| 欧美日韩xxxxx| 黄色a级在线观看| 色婷婷综合久久久久中文字幕1| 亚洲最大的av网站| 国产伦视频一区二区三区| 久久好看免费视频| 日本一区二区三区四区五区六区| 国产免费黄视频| 国产成人精品一区二区| 欧美激情xxxx| 国产伊人精品在线| 久久久久久国产精品一区| 亚洲不卡中文字幕| 国产日韩精品久久| 久久久久久久香蕉网| 午夜精品久久久久久久99热浪潮| 蜜桃视频在线观看91| www亚洲欧美| 日韩五码在线观看| 久久人人爽人人爽人人片av高请 | 国产综合 伊人色| 国产精品日韩一区二区| 青青青青草视频| 91精品国产综合久久香蕉的用户体验 | 久久久999免费视频| 亚洲精品欧洲精品| 91高清视频免费| 天天好比中文综合网| 国产精品 日韩| 亚洲一区三区电影在线观看| 国产日韩在线一区二区三区| 国产精品丝袜视频| 日韩精品在线视频免费观看| 久久精品国产综合精品| 日韩免费视频在线观看| 久久久久久久久久久久久9999| 日本三级中国三级99人妇网站 | 北条麻妃在线一区| 亚洲欧美日韩精品在线| 草b视频在线观看| 中文字幕无码精品亚洲35| 99在线看视频| 午夜老司机精品| 国产成人高潮免费观看精品| 欧美综合激情| 久久这里只有精品99| 国产精品最新在线观看| 亚洲国产精品久久久久爰色欲| 91精品黄色| 欧美少妇一级片| 亚洲www视频| 精品激情国产视频| 99国产盗摄| 精品人伦一区二区三区| 亚洲天堂电影网| 久久一区二区三区欧美亚洲| 明星裸体视频一区二区| 国产精品欧美风情| 91av在线播放| 欧美不卡1区2区3区| 一区二区三区四区欧美日韩| 91av在线不卡| 国产欧美日韩亚洲| 色综合久久88色综合天天提莫| 国产精品久久久久久久久久久久| 国产噜噜噜噜久久久久久久久| 日本不卡高清视频一区| 久久成人人人人精品欧| 日韩在线观看精品| 成人av资源在线播放| 欧美在线一区二区三区四| 久操成人在线视频| 国产伊人精品在线| 日韩经典在线视频| 欧美激情一二区| 久久久久欧美| 高清一区二区三区日本久 | 亚洲淫片在线视频| 国产精品视频精品| 97免费中文视频在线观看| 欧美在线激情网| 亚洲**2019国产| 色视频www在线播放国产成人| 国产精品一久久香蕉国产线看观看| 日本久久久a级免费| 国产精品视频成人| 久久综合给合久久狠狠色| 国产欧美一区二区三区视频| 欧美在线视频免费| 欧美一级视频在线观看| 伊人久久av导航| 国产精品国产三级国产aⅴ9色| 久久琪琪电影院| 国产精品夜色7777狼人| 日韩少妇内射免费播放| 午夜精品久久久久久久久久久久 | 99久久精品免费看国产四区 | 久久精品一区二| 国产精品自在线| 好吊色欧美一区二区三区| 日韩av不卡在线播放| 亚洲欧洲一区二区福利| 国产精品免费小视频| 久久av秘一区二区三区| 91成人福利在线| 91国自产精品中文字幕亚洲| 国产精品一区而去| 国产一区精品视频| 欧美一区二区影视| 日韩欧美精品免费| 亚洲蜜桃av| 亚洲中文字幕无码中文字| 美女av一区二区三区|