最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Java二十六篇:數(shù)據(jù)庫編程

2023-03-06 00:20 作者:小劉Java之路  | 我要投稿

視圖

  • 概念

    將有關(guān)聯(lián)的表創(chuàng)建成一張視圖表,生成的視圖表是一張?zhí)摂M表,只能完成數(shù)據(jù)的查詢和修改,不能完成數(shù)據(jù)的刪除和新增。

  • 優(yōu)缺點:

    優(yōu)點:可以將有關(guān)聯(lián)的表,創(chuàng)建成視圖,供下一次查詢的時候,可以當(dāng)成單表查詢,提高程序員編寫代碼的速度。

    缺點:

    1、只能做查詢和修改操作,不能做刪除和新增操作

    2、視圖并不是越多越好,因為視圖一旦創(chuàng)建,要求原數(shù)據(jù)庫表中的字段不能做任何的修改,如果做了修改,那么視圖崩潰。

變量和控制語句

變量

  • 系統(tǒng)變量

定義:在數(shù)據(jù)庫管理系統(tǒng)里面,在設(shè)計的時候,就已經(jīng)規(guī)定好了的變量,一般用來控制整個數(shù)據(jù)庫管理系 ? ? ? ?統(tǒng), 比如mysql數(shù)據(jù)庫管理系統(tǒng)。

系統(tǒng)變量的語法:@@變量名

查詢系統(tǒng)變量:show variables;(查詢所有的系統(tǒng)變量)

show variables like "%名稱%"(查詢部分系統(tǒng)變量)

  • 會話變量(用戶變量/全局變量)

    程序員根據(jù)編程需要,在數(shù)據(jù)庫的本次會話中創(chuàng)建一個變量,供下面代碼使用。

    會話變量語法:@變量名

    添加一個會話變量:set @變量名 = 值;

    查詢一個會話變量:select @變量名;

    每一次修改會話變量的值,必須加set關(guān)鍵字

  • 局部變量

    作用在部分代碼片段中的變量,一般是在函數(shù)、存儲過程、觸發(fā)器中的變量,在begin和end代碼之間存在,必須還要用declare定義聲明

    定義局部變量:declare ?變量名 數(shù)據(jù)類型 ? default 值;

控制語句

  • 分支語句

-- 第一種情況
IF 判斷語句 THEN
當(dāng)判斷語句為真的時候,執(zhí)行的代碼
ENDIF;
-- 第二種情況
IF 判斷語句1 THEN
當(dāng)判斷語句1位真的時候,執(zhí)行的代碼;
ELSEIF 判斷語句2 THEN
當(dāng)判斷語句2位真的時候,執(zhí)行代碼;
ELSE
如果上面情況都不滿足,執(zhí)行的代碼;
ENDIF;
-- 分支語句的嵌套
IF 判斷語句 THEN
IF 判斷語句 THEN
執(zhí)行語句
ENDIF;
ENDIF;

  • 循環(huán)語句

WHILE 判斷語句 DO
循環(huán)的代碼;
ENDWHILE;

-- 數(shù)據(jù)庫中跳出循環(huán)的方法:
leave:終止循環(huán)的代碼,和java中的break作用一致。
iterate:結(jié)束本次循環(huán),繼續(xù)下一次循環(huán),和java中的continue作用一致。

當(dāng)有多層循環(huán)的時候,要跳出指定層次的循環(huán),需要使用跳出循環(huán)的標(biāo)記。
-- 舉例:
WHILE 判斷語句1 DO
log:WHILE 判斷語句2DO
WHILE 判斷語句3DO
循環(huán)的代碼;
IF 判斷語句 THEN
leave log;
ENDIF;
ENDWHILE;
ENDWHILE;
ENDWHILE;

函數(shù)

概念:將實現(xiàn)特定功能的代碼片段進(jìn)行封裝,需要使用的時候,調(diào)用函數(shù)即可,提高代碼的復(fù)用性,是封裝的最小體現(xiàn)單元。

系統(tǒng)函數(shù)

-- 聚合函數(shù)
count();
max();
min();
avg();
sum();
-- 其他聚合函數(shù)
now();獲取當(dāng)前的瞬時時間戳
year();獲取字段中的年份
UUID();生成一個36位不重復(fù)的字符串,后續(xù)數(shù)據(jù)庫要使用UUID生成主鍵。
LAST_INSERT_ID();最后一次新增數(shù)據(jù)的主鍵值(必須是主鍵自增)。

新增函數(shù)

-- 語法:
CREATEfunction 函數(shù)名(參數(shù)列表) RETURNS 返回值數(shù)據(jù)類型
BEGIN
實現(xiàn)特定功能的函數(shù)代碼片段
END

-- 舉例:計算兩個數(shù)和
-- 修改數(shù)據(jù)庫結(jié)束標(biāo)識符
delimiter &
createfunction add1() returnsint
begin
-- 定義一個局部變量,記錄兩個數(shù)的和
declare res intdefault0;
set res = 10 + 20;
return res;
end &

查詢函數(shù)

-- 查詢語法:查詢所有的函數(shù)
showfunctionstatus;
-- 使用模糊查詢到程序員自定義的函數(shù)
showfunctionstatuslike"%add1%";

調(diào)用函數(shù)

-- 語法
select 函數(shù)名();

刪除函數(shù)

-- 語法
dropfunction 函數(shù)名;

案例:

-- 計算1-100之間的所有能被3和7同時整除的數(shù)之和
createfunction add4() returnsint
begin
-- 定義一個局部變量,來記錄兩個數(shù)的和
declare res intdefault0;
-- 定義一個局部變量,來記錄循環(huán)判斷
declare i intdefault1;
-- 循環(huán)的代碼
while i <= 100 do
if i % 3 = 0and i % 7 = 0then
set res = res + i;
endif;
set i = i + 1;
endwhile;
-- 返回值
return res;
end
-- 定義一個函數(shù),計算x的y次方。x和y的值由參數(shù)傳入。
create function fun(x int,y int) returns double
begin
-- 定義一個變量,用于記錄最終的結(jié)果
declare res double default 1.0;
declare i int default 0;
declare j int default 0;
-- 判斷指數(shù)的大?。ù笥??小于0?等于0)
if y > 0 then
while i < y do
set res = res * x;
set i = i + 1;
end while;
elseif y < 0 then

set y = y * (-1);
while j < y do
set res = res * x;
set j = j +1;
end while;
set res = 1 / res;
else
set res = 1.0;
end if;
return res;
end

存儲過程

概念:和函數(shù)的概念一致,將實現(xiàn)特定功能的代碼片段封裝起來,放在一個存儲過程中,需要使用的時候調(diào)用即可。關(guān)鍵字為:procedure

和函數(shù)的區(qū)別

1、函數(shù)存在返回值,存儲過程沒有返回值。

2、函數(shù)的參數(shù),只有參數(shù)名和數(shù)據(jù)類型;存儲過程參數(shù),有參數(shù)名,數(shù)據(jù)類型,參數(shù)類型。

創(chuàng)建過程

-- 語法:
createprocedure 過程名稱(參數(shù)列表)
begin
實現(xiàn)存儲過程的代碼片段;
end

-- 舉例:
createprocedure pro1()
begin
-- 定義變量,記錄兩個數(shù)的和
declare res intdefault0;
-- 定義一個變量,用于判斷
declare i intdefault1;
while i <= 100 do
set res = res + i;
set i = i + 1;
endwhile;
select res;
end

查詢過程

-- 查詢所有的存儲過程
show procedure status;
-- 模糊查詢存儲過程
show procedure status like "%pro%";

調(diào)用過程

call 存儲過程名稱();

刪除過程

drop procedure 存儲過程名稱;

參數(shù)列表

參數(shù)列表:參數(shù)類型 參數(shù)名 數(shù)據(jù)類型
重點:參數(shù)類型
in:將存儲過程外面的變量可以傳入到存儲過程里面使用。外面的變量:會話變量。
out:可以把存儲過程里面操作過的會話變量的值傳到存儲過程外面。
inout:既可以將存儲過程外面的值傳入到里面使用,也可以將里面修改過后的值,作用到存儲過程外面。

案例:

-- 定義三個會話變量
set @num1 = 1;
set @num2 = 2;
set @num3 = 3;

-- 查詢?nèi)齻€會話變量
select @num1,@num2,@num3;

-- 定義一個存儲過程,三個形式參數(shù),參數(shù)類型分別為in,out,inout
create procedure pro3(in a int,out b int,inout c int)
begin
-- 查詢?nèi)齻€形式參數(shù)的值
select a,b,c; ? ?-- 1,2,3
-- 查詢?nèi)齻€會話變量
select @num1,@num2,@num3; ? ?-- 1,2,3
-- 修改形式參數(shù)的值(局部變量)
set a = 10;
set b = 20;
set c = 30;
-- 查詢一遍a,b,c的值
select a,b,c; ? ? -- 10,20,30

-- 查詢?nèi)齻€會話變量
select @num1,@num2,@num3; ?-- 1,2,3
end

-- 調(diào)用存儲過程
call pro3(@num1,@num2,@num3);

-- 再次查詢會話變量
select @num1,@num2,@num3;

  • 如果參數(shù)類型為out類型,那么在實際參數(shù)傳遞給形式參數(shù)的時候,形式參數(shù)將拋棄實際參數(shù)的值,先將其置為null(形式參數(shù))

  • 當(dāng)整個存儲過程執(zhí)行結(jié)束之后,返回去檢測每個形式參數(shù)的參數(shù)類型,如果是out或者inout,那么將形式參數(shù)修改過后的值,作用到實際參數(shù)上。

觸發(fā)器

概念:封裝一段代碼片段(一般都是對數(shù)據(jù)的增、刪、改的操作),當(dāng)達(dá)到了觸發(fā)器的條件的時候,自動調(diào)用并執(zhí)行。不需要程序員主動用代碼進(jìn)行調(diào)用。

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

create trigger 觸發(fā)器名稱 觸發(fā)時機(jī) 觸發(fā)事件 on 表名 for each row
begin
封裝的代碼片段;
end

觸發(fā)時機(jī):after和before
觸發(fā)事件:insert、update、delete

-- 創(chuàng)建觸發(fā)器
CREATE TRIGGER tri1 AFTER INSERT ON t_order FOR EACH ROW
BEGIN
-- 修改商品表中的數(shù)據(jù)
UPDATE t_product SET p_number = p_number - new.o_number where p_id = new.p_id;
END

-- 說明:
new.o_number:剛剛新增數(shù)據(jù)中字段的數(shù)據(jù)
new.p_id:剛剛新增數(shù)據(jù)中字段的數(shù)據(jù)

查詢觸發(fā)器

-- 查詢觸發(fā)器
show triggers;

刪除觸發(fā)器

drop trigger 觸發(fā)器名稱

索引

概念:索引的作用就是增加數(shù)據(jù)庫的查詢效率,索引本質(zhì)上就是將一個字段有順序的生成為一個數(shù)據(jù)結(jié)構(gòu)(樹結(jié)構(gòu)),在mysql中存在主鍵默認(rèn)加索引。

優(yōu)缺點

  • 優(yōu)點:索引會增加查詢效率

  • 缺點:會增加維護(hù)成本,主要維護(hù)成本是在新增數(shù)據(jù)、刪除數(shù)據(jù)和修改數(shù)據(jù)的時候維護(hù),所以會降低這三個操作的效率;索引的本質(zhì)是數(shù)據(jù)結(jié)構(gòu),會占用一定的內(nèi)存空間。

注意:索引只是一種技術(shù),索引是存在引擎里面的,數(shù)據(jù)庫管理系統(tǒng)可能是不一樣引擎,因此數(shù)據(jù)庫會因為引擎的不一樣而對索引類型的支持不一樣。

索引的類型

  • BTREE索引:B樹索引(B+樹),基本上大部分引擎都支持B數(shù)索引

  • Hash索引:只有在menory引擎才會支持該索引

  • Full-text索引:全文索引,一般在搜索功能里面會用到。

  • 唯一索引:主鍵用的就是唯一索引

  • 空間索引:

B樹索引:多路平衡搜索樹,不一定是二叉樹,可以是M叉樹。

舉例說明一下B樹的生成過程,以5叉樹為例

25、19、23、21、18、27、16、13、29、28、26、31、24、17、33、15

我也知道的比較少,像這種數(shù)據(jù)結(jié)構(gòu)的東西,所以我在學(xué)習(xí)Java方面的數(shù)據(jù)結(jié)構(gòu)和算法,加油吧!

總結(jié):

  • 1、一般數(shù)據(jù)庫編程中,在企業(yè)中存儲過程還有些老的企業(yè)還在使用

  • 2、索引是這里面的重中之重,學(xué)好索引你的查詢效率會有所提升

    優(yōu)缺點

    • 優(yōu)點:索引會增加查詢效率

    • 缺點:會增加維護(hù)成本,主要維護(hù)成本是在新增數(shù)據(jù)、刪除數(shù)據(jù)和修改數(shù)據(jù)的時候維護(hù),所以會降低這三個操作的效率;索引的本質(zhì)是數(shù)據(jù)結(jié)構(gòu),會占用一定的內(nèi)存空間。

  • 3、在不同的需求面前,都是先用最容易的方式實現(xiàn)功能等后期才優(yōu)化代碼、代碼擴(kuò)展和并發(fā)

  • 4、技術(shù)是為需求服務(wù)的


圖片


Java二十六篇:數(shù)據(jù)庫編程的評論 (共 條)

分享到微博請遵守國家法律
义乌市| 邢台县| 乌拉特后旗| 绍兴市| 汝南县| 博野县| 昌江| 金坛市| 富平县| 襄城县| 安新县| 苏尼特左旗| 通海县| 汉阴县| 红桥区| 龙州县| 乌拉特中旗| 贵南县| 洞头县| 鹤山市| 昌乐县| 东台市| 日土县| 河曲县| 黄浦区| 繁昌县| 秭归县| 宝坻区| 镇远县| 昭觉县| 新绛县| 梁山县| 孟连| 新田县| 墨玉县| 襄汾县| 北票市| 乌拉特后旗| 乌拉特前旗| 宜都市| 安多县|