MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)與應(yīng)用項(xiàng)目化教程(微課版)-實(shí)訓(xùn)指導(dǎo)匯 項(xiàng)目實(shí)訓(xùn)1-8 創(chuàng)建網(wǎng)上商城數(shù)據(jù)庫(kù)webshop-維護(hù)高校圖書(shū)管理數(shù)據(jù)庫(kù)的安全性_第1頁(yè)
MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)與應(yīng)用項(xiàng)目化教程(微課版)-實(shí)訓(xùn)指導(dǎo)匯 項(xiàng)目實(shí)訓(xùn)1-8 創(chuàng)建網(wǎng)上商城數(shù)據(jù)庫(kù)webshop-維護(hù)高校圖書(shū)管理數(shù)據(jù)庫(kù)的安全性_第2頁(yè)
MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)與應(yīng)用項(xiàng)目化教程(微課版)-實(shí)訓(xùn)指導(dǎo)匯 項(xiàng)目實(shí)訓(xùn)1-8 創(chuàng)建網(wǎng)上商城數(shù)據(jù)庫(kù)webshop-維護(hù)高校圖書(shū)管理數(shù)據(jù)庫(kù)的安全性_第3頁(yè)
MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)與應(yīng)用項(xiàng)目化教程(微課版)-實(shí)訓(xùn)指導(dǎo)匯 項(xiàng)目實(shí)訓(xùn)1-8 創(chuàng)建網(wǎng)上商城數(shù)據(jù)庫(kù)webshop-維護(hù)高校圖書(shū)管理數(shù)據(jù)庫(kù)的安全性_第4頁(yè)
MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)與應(yīng)用項(xiàng)目化教程(微課版)-實(shí)訓(xùn)指導(dǎo)匯 項(xiàng)目實(shí)訓(xùn)1-8 創(chuàng)建網(wǎng)上商城數(shù)據(jù)庫(kù)webshop-維護(hù)高校圖書(shū)管理數(shù)據(jù)庫(kù)的安全性_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

項(xiàng)目實(shí)訓(xùn)1創(chuàng)建網(wǎng)上商城數(shù)據(jù)庫(kù)webshop實(shí)訓(xùn)內(nèi)容1.安裝MySQL服務(wù)器(1)下載并安裝MySQL8.0數(shù)據(jù)庫(kù)軟件,注意安裝過(guò)程的配置信息。提示:下載及安裝過(guò)程參考課本第6-11頁(yè)內(nèi)容啟動(dòng)MySQL服務(wù)。提示:兩種方法啟動(dòng)MySQL服務(wù)。Windows服務(wù)管理器啟動(dòng),方法參照課本第12頁(yè)命令方式啟動(dòng)輸入命令netstartmysql80設(shè)置Path環(huán)境變量。提示:將MySQL安裝路徑的bin目錄添加到path環(huán)境變量中,具體方法參照課本第13頁(yè),設(shè)置完成后,就可以在任意目錄下輸入mysql命令登錄MySQL服務(wù)器。以命令行方式登錄MySQL8.0服務(wù)器。提示:進(jìn)入命令提示符窗口中,輸入命令mysql-uroot-p回車(chē)換行后,輸入root用戶密碼,即可啟動(dòng)MySQL服務(wù)器。2.安裝圖形化工具Navicat(1)安裝NavicatforMySQL軟件。(2)建立連接,登錄到MySQL8.0服務(wù)器。(3)建立查詢(xún),輸入命令,查看執(zhí)行結(jié)果。3.創(chuàng)建網(wǎng)上商城數(shù)據(jù)庫(kù)webShop(1)創(chuàng)建數(shù)據(jù)庫(kù)webShop。提示:兩種方法創(chuàng)建數(shù)據(jù)庫(kù),一種方法是使用命令createdatabasewebshop,第二種方法在Navicat工具中創(chuàng)建。查看webShop數(shù)據(jù)庫(kù)的編碼信息。提示:輸入命令showcreatedatabasewebshop;選擇該數(shù)據(jù)庫(kù)。提示:輸入命令usewebshop;項(xiàng)目實(shí)訓(xùn)2管理網(wǎng)上商城數(shù)據(jù)表實(shí)訓(xùn)內(nèi)容1.按照表2-15的要求創(chuàng)建商品表goods。提示:建表語(yǔ)句CREATETABLEgoods(g_idintauto_incrementPRIMARYKEYCOMMENT'商品id',g_namevarchar(120)NOTNULLCOMMENT'商品名稱(chēng)',categoryvarchar(100)COMMENT'商品類(lèi)別',pricedecimal(10,2)NOTNULLDEFAULT(0)COMMENT'商品價(jià)格',numberintUNSIGNEDNOTNULLDEFAULT(0)COMMENT'商品數(shù)量',descriptionVARCHAR(255)COMMENT'商品描述');2.按照表2-16的要求創(chuàng)建會(huì)員表customers。提示:建表語(yǔ)句CREATETABLEcustomers(c_idintauto_incrementPRIMARYKEYCOMMENT'會(huì)員id',c_nameVARCHAR(100)NOTNULLCOMMENT'會(huì)員名稱(chēng)',passwordVARCHAR(255)NOTNULLDEFAULT('')COMMENT'密碼',genderTINYINTUNSIGNEDNOTNULLDEFAULT(1)COMMENT'性別',birthdateCOMMENT'出生日期',truenamevarchar(20)COMMENT'真實(shí)姓名',emailvarchar(100)COMMENT'郵箱',addressvarchar(100)COMMENT'地址',phonechar(11)COMMENT'手機(jī)號(hào)',levelTINYINTUNSIGNEDCOMMENT'會(huì)員等級(jí)');按照表2-17的要求創(chuàng)建訂單表orders。提示:建表語(yǔ)句CREATETABLEorders(o_idintauto_incrementPRIMARYKEYCOMMENT'訂單id',c_idintCOMMENT'會(huì)員id',o_sumDECIMAL(10,2)UNSIGNEDCOMMENT'訂單總額',o_datedateCOMMENT'下單日期',o_statusvarchar(20)COMMENT'訂單狀態(tài)');按照表2-18的要求創(chuàng)建訂單詳情表orderDetail。提示:建表語(yǔ)句CREATETABLEorderDetail(od_idintauto_incrementPRIMARYkeyCOMMENT'訂單詳情id',o_idintCOMMENT'訂單id',g_idintCOMMENT'商品id',od_numberintUNSIGNEDnotnullDEFAULT(0)COMMENT'購(gòu)買(mǎi)數(shù)量',noteVARCHAR(255)COMMENT'會(huì)員備注');為訂單表orders的c_id列添加外鍵,參照customers表的id列。為訂單詳情表orderDetail的訂單id和商品id列添加外鍵。提示:添加外鍵語(yǔ)句ALTERTABLEordersADDCONSTRAINTfk_c_idFOREIGNKEY(c_id)REFERENCEScustomers(c_id);ALTERTABLEorderDetailADDCONSTRAINTfk_o_idFOREIGNKEY(o_id)REFERENCESorders(o_id);ALTERTABLEorderDetailADDCONSTRAINTfk_g_idFOREIGNKEY(g_id)REFERENCESgoods(g_id);為上述各表分別添加數(shù)據(jù),各數(shù)據(jù)表的具體數(shù)據(jù)如表2-19~表2-22所示。提示:添加數(shù)據(jù)語(yǔ)句以商品表goods為例:INSERTintogoodsVALUES(null,'海爾滾筒洗衣機(jī)','生活電器',2500,10,null);INSERTintogoodsVALUES(null,'美的大口徑原汁機(jī)','生活電器',300,20,null);INSERTintogoodsVALUES(null,'內(nèi)蒙古風(fēng)干牛肉干','食品',100,30,null);INSERTintogoodsVALUES(null,'三只松鼠每日?qǐng)?jiān)果','食品',110,20,null);INSERTintogoodsVALUES(null,'海爾510升冰箱','生活電器',3800,5,null);INSERTintogoodsVALUES(null,'紅星100%純羊毛衫','女裝',360,6,null);INSERTintogoodsVALUES(null,'紅星貓罐頭','食品',265,50,null);INSERTintogoodsVALUES(null,'特侖蘇牛奶','食品',80,40,null);分別對(duì)上述表數(shù)據(jù)進(jìn)行修改、刪除、查詢(xún)操作。提示:使用select、update、delete語(yǔ)句進(jìn)行查詢(xún)、修改、刪除操作select*fromgoods;UPDATEgoodssetcategory='寵物食品'whereg_name='紅星貓罐頭';項(xiàng)目實(shí)訓(xùn)3查詢(xún)網(wǎng)上商城數(shù)據(jù)表實(shí)訓(xùn)內(nèi)容1.針對(duì)項(xiàng)目2中實(shí)訓(xùn)建立的商品表goods和會(huì)員表customers,完成如下查詢(xún)。(1)查詢(xún)商品表中所有商品的詳細(xì)信息。SELECT*FROMgoods;查詢(xún)商品表中所有商品的商品號(hào)、商品名稱(chēng)和商品總額(商品數(shù)量和單價(jià)的乘積),并以漢字標(biāo)題顯示列名。SELECTg_id商品號(hào),g_name商品名稱(chēng),price*number商品總額FROMgoods;查詢(xún)商品類(lèi)別為“生活電器類(lèi)”、商品單價(jià)在2500元以上的商品的詳細(xì)信息。SELECT*FROMgoodsWHEREcategory='生活電器'andprice>=2500;查詢(xún)所有商品名稱(chēng)中包含“紅星”的商品的詳細(xì)信息。SELECT*FROMgoodsWHEREg_nameLIKE'%紅星%';商品表中需要了解價(jià)格在2500元以上的商品的商品號(hào)、商品名稱(chēng)、商品類(lèi)別和商品單價(jià)信息,并要求按類(lèi)別升序排列,如果是同一類(lèi)別的商品,則按價(jià)格降序排列。SELECTg_id,g_name,category,priceFROMgoodsWHEREprice>=2500ORDERBYcategory,pricedesc;查詢(xún)商品價(jià)格高于平均價(jià)格的商品信息。SELECT*FROMgoodsWHEREprice>(selectavg(price)fromgoods);查詢(xún)customers表中所有年齡在20~25歲的會(huì)員的會(huì)員名、籍貫和年齡。SELECTc_name,address,YEAR(NOW())-YEAR(birth)c_ageFROMcustomersWHEREYEAR(NOW())-YEAR(birth)BETWEEN20and25;查詢(xún)customers表中“山東”省的所有男性會(huì)員或者是年齡在30歲以下的會(huì)員的會(huì)員號(hào)、會(huì)員名、性別、地址和年齡。SELECTc_id,c_name,gender,address,YEAR(NOW())-YEAR(birth)c_ageFROMcustomersWHEREaddresslike'%山東%'andgender=1orYEAR(NOW())-YEAR(birth)<30;查詢(xún)customers表中不是來(lái)自“山東青島”和“山東濟(jì)南”兩地會(huì)員的詳細(xì)信息。SELECT*fromcustomersWHEREaddressnotlike'%山東%青島%'ANDaddressnotlike'%山東%濟(jì)南%';查詢(xún)customers表中姓“黃”且名字中只有兩個(gè)漢字的會(huì)員的會(huì)員名、真實(shí)姓名、電話和電子郵箱。SELECTc_name,truename,phone,emailfromcustomersWHEREtruenamelike'黃_';統(tǒng)計(jì)customers表中男、女會(huì)員的總?cè)藬?shù)。SELECTgender,count(*)fromcustomersGROUPBYgender;統(tǒng)計(jì)goods表中每個(gè)類(lèi)別的商品總數(shù)。SELECTcategory,sum(number)fromgoodsGROUPBYcategory;2.針對(duì)會(huì)員表customers和訂單表orders,完成如下查詢(xún)。(1)統(tǒng)計(jì)每個(gè)會(huì)員的訂單總額,顯示會(huì)員名和總額。SELECTc_name,sum(o_sum)fromcustomersJOINordersoncustomers.c_id=orders.c_idGROUPBYc_name;(2)查詢(xún)訂單總額最高的會(huì)員的id和會(huì)員名。SELECTcustomers.c_id,c_namefromcustomersJOINordersoncustomers.c_id=orders.c_idGROUPBYcustomers.c_idHAVINGsum(o_sum)>=all(SELECTsum(o_sum)FROMordersGROUPBYc_id);(3)查詢(xún)訂單最多的會(huì)員編號(hào)。SELECTc_idfromordersGROUPBYc_idHAVINGcount(*)>=all(SELECTcount(*)fromordersGROUPBYc_id);或者SELECTc_idfromordersGROUPBYc_idORDERBYcount(*)descLIMIT1;(4)統(tǒng)計(jì)orders表中每個(gè)會(huì)員的訂單總額,并顯示大于平均總額的會(huì)員編號(hào)和訂單總額。SELECTc_id,sum(o_sum)fromordersGROUPBYc_idHAVINGsum(o_sum)>(SELECTavg(sum_o_sum)from(selectsum(o_sum)sum_o_sumfromordersGROUPBYc_id)t);(5)查詢(xún)所有會(huì)員的信息,按會(huì)員的消費(fèi)次數(shù)降序排列。SELECTcustomers.*FROMcustomersJOINordersoncustomers.c_id=orders.c_idgroupbycustomers.c_idORDERBYcount(*)desc;(6)查詢(xún)消費(fèi)30次以上的會(huì)員信息。SELECTcustomers.*FROMcustomersJOINordersoncustomers.c_id=orders.c_idgroupbycustomers.c_idHAVINGcount(*)>=30;(7)查詢(xún)消費(fèi)金額最高的前三名會(huì)員的信息。SELECTcustomers.*FROMcustomersJOINordersoncustomers.c_id=orders.c_idgroupbycustomers.c_idORDERBYsum(o_sum)DESCLIMIT3;(8)統(tǒng)計(jì)orders表中每天的訂單總額,并根據(jù)訂單總額降序排列。SELECTo_date,sum(o_sum)fromordersgroupbyo_dateORDERBYsum(o_sum)desc;3.針對(duì)商品表goods、會(huì)員表customers、訂單表orders和訂單信息表order_detail,完成如下查詢(xún)。(1)查詢(xún)會(huì)員id是12的會(huì)員的訂單下單日期及該訂單的商品id、商品名稱(chēng)及購(gòu)買(mǎi)數(shù)量。SELECTc_id,o_date,goods.g_id,g_name,od_numberfromorders,orderdetail,goodsWHEREorders.o_id=orderdetail.o_idANDorderdetail.g_id=goods.g_id;(2)查詢(xún)牛奶這件商品被哪些會(huì)員購(gòu)買(mǎi)過(guò),查詢(xún)結(jié)果顯示會(huì)員id和下單時(shí)間。SELECTc_id,o_datefromgoods,orderdetail,ordersWHEREorders.o_id=orderdetail.o_idANDorderdetail.g_id=goods.g_idandg_namelike'%牛奶%';(3)查詢(xún)會(huì)員的姓名、手機(jī)號(hào)及其購(gòu)買(mǎi)的商品名稱(chēng)、商品類(lèi)別和單價(jià)信息。selectc_name,phone,g_name,category,pricefromcustomers,orders,orderdetail,goodswhereorders.o_id=orderdetail.o_idANDorderdetail.g_id=goods.g_idandorders.c_id=customers.c_id;(4)查詢(xún)orders表中訂單總額大于5000的訂單信息,并按訂單總額升序排列。select*fromordersWHEREo_sum>5000ORDERBYo_sum;項(xiàng)目實(shí)訓(xùn)4網(wǎng)上商城數(shù)據(jù)庫(kù)索引和視圖的管理實(shí)訓(xùn)內(nèi)容(1)在商品表goods的g_name列上建立前綴索引。CREATEINDEXidx_g_nameongoods(g_name(10));(2)分別在會(huì)員表customers的c_name列和phone列上建立唯一索引。CREATEUNIQUEINDEXidx_c_nameoncustomers(c_name);CREATEUNIQUEINDEXidx_phoneoncustomers(phone);(3)在訂單表orders的訂單總額和下單日期列上建立組合索引。CREATEINDEXidx_o_sum_dateonorders(o_sum,o_date);(4)在訂單詳情表orderDetail的購(gòu)買(mǎi)數(shù)量列上建立普通索引。CREATEINDEXidx_od_numberonorderdetail(od_number);(5)執(zhí)行查詢(xún)操作:查詢(xún)牛奶這件商品被哪些用戶購(gòu)買(mǎi)過(guò),查詢(xún)結(jié)果顯示會(huì)員編號(hào)和下單時(shí)間,觀看該查詢(xún)使用的索引情況。EXPLAINSELECTc_id,o_datefromgoods,orderdetail,ordersWHEREorders.o_id=orderdetail.o_idANDorderdetail.g_id=goods.g_idandg_namelike'%牛奶%';(6)創(chuàng)建視圖view_order,包括會(huì)員的會(huì)員名稱(chēng)、姓名、手機(jī)號(hào)及其所購(gòu)買(mǎi)商品的ID、商品名稱(chēng)、類(lèi)別、單價(jià)信息及購(gòu)買(mǎi)時(shí)間。CREATEORREPLACEVIEWview_orderasselectc_name,truename,phone,goods.g_id,g_name,category,price,o_date,od_numberfromcustomers,orders,orderdetail,goodswhereorders.o_id=orderdetail.o_idANDorderdetail.g_id=goods.g_idandorders.c_id=customers.c_id;(7)基于視圖view_order進(jìn)行查詢(xún):查詢(xún)商品名稱(chēng)包含“紅星”字樣的商品的銷(xiāo)售情況,被哪些會(huì)員購(gòu)買(mǎi)過(guò)及購(gòu)買(mǎi)時(shí)間和數(shù)量。SELECTc_name,truename,g_id,g_name,o_date,od_numberfromview_orderwhereg_namelike'%紅星%';(8)基于視圖view_order進(jìn)行查詢(xún):查詢(xún)購(gòu)買(mǎi)商品30次以上的會(huì)員信息,包括會(huì)員名稱(chēng)、姓名、手機(jī)號(hào)。SELECTc_name,truename,phoneFROMview_orderGROUPBYc_namehavingcount(*)>=30;(9)在視圖view_order中修改某會(huì)員的手機(jī)號(hào),查看基本表customers中數(shù)據(jù)的變化情況。UPDATEview_ordersetphone='28888222233'WHEREc_name='orange';修改后查看customers表,數(shù)據(jù)應(yīng)該被修改了。(10)創(chuàng)建視圖view_sales,統(tǒng)計(jì)該網(wǎng)站商品的銷(xiāo)售排行,按照購(gòu)買(mǎi)次數(shù)降序排列。CREATEVIEWview_salesasSELECTgoods.g_id,g_name,category,price,sum(od_number)fromgoods,orders,orderdetailwhereorders.o_id=orderdetail.o_idANDorderdetail.g_id=goods.g_idGROUPBYgoods.g_idorderbysum(od_number)desc;項(xiàng)目實(shí)訓(xùn)5設(shè)計(jì)高校圖書(shū)管理數(shù)據(jù)庫(kù)實(shí)訓(xùn)內(nèi)容(1)下面是某高校圖書(shū)館的圖書(shū)管理系統(tǒng)的需求描述,仔細(xì)閱讀以下文字后,為該系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)出E-R圖。某高校圖書(shū)館存儲(chǔ)了上百萬(wàn)種不同分類(lèi)的圖書(shū),為了更方便地管理、借閱這些圖書(shū),需要開(kāi)發(fā)一套管理系統(tǒng),以提高圖書(shū)借閱管理水平,方便讀者借閱。該系統(tǒng)提供以下功能。管理員可添加圖書(shū)信息,如果不存在同名、同作者的圖書(shū),則新增圖書(shū),否則修改圖書(shū)數(shù)量。管理員可管理圖書(shū)類(lèi)別。管理員可為讀者辦理一張借閱卡。普通借閱卡最多可借閱3本書(shū),VIP卡最多可借閱5本書(shū)。如果已達(dá)到借閱卡借閱數(shù)量的限制,還想再借閱圖書(shū),則必須先歸還已借圖書(shū)。可按圖書(shū)編號(hào)、圖書(shū)名稱(chēng)、作者、圖書(shū)類(lèi)型等查詢(xún)出相應(yīng)的圖書(shū)信息。圖書(shū)編號(hào)、圖書(shū)名稱(chēng)、作者、圖書(shū)類(lèi)型、價(jià)格、當(dāng)前數(shù)量列出的圖書(shū)信息包括等。可查詢(xún)某個(gè)讀者(借閱卡)當(dāng)前的借閱情況:哪些圖書(shū)未歸還,還可借幾本。可查詢(xún)某個(gè)借閱卡的歷史借閱情況。提示:該系統(tǒng)可以設(shè)計(jì)成E-R圖如下:其中讀者實(shí)體的屬性可以有:讀者編號(hào)、姓名、性別、專(zhuān)業(yè)、班級(jí)等圖書(shū)實(shí)體的屬性可以有:圖書(shū)編號(hào)、圖書(shū)名稱(chēng)、作者、圖書(shū)類(lèi)型、價(jià)格、當(dāng)前數(shù)量等借閱卡實(shí)體的屬性可以有:借閱卡號(hào)、借閱卡等級(jí)圖書(shū)類(lèi)型實(shí)體的屬性可以有:類(lèi)型號(hào)、類(lèi)型名稱(chēng)等將設(shè)計(jì)出的E-R圖轉(zhuǎn)換成關(guān)系模型。將上題設(shè)計(jì)的E-R圖轉(zhuǎn)換成關(guān)系模型為:圖書(shū)(圖書(shū)編號(hào),圖書(shū)名稱(chēng),圖書(shū)類(lèi)型號(hào),作者,價(jià)格,數(shù)量)讀者(讀者編號(hào),姓名,性別,專(zhuān)業(yè),班級(jí))借閱卡(卡號(hào),讀者編號(hào),借閱卡等級(jí),辦卡時(shí)間)借閱(圖書(shū)編號(hào),借閱卡號(hào),借閱時(shí)間、歸還時(shí)間)圖書(shū)類(lèi)型(類(lèi)型號(hào),類(lèi)型名稱(chēng))字段名說(shuō)明數(shù)據(jù)類(lèi)型描述bookid圖書(shū)編號(hào)字符串長(zhǎng)度為5,主碼bookname圖書(shū)名稱(chēng)字符串長(zhǎng)度為50typeid圖書(shū)類(lèi)型編號(hào)字符串引用圖書(shū)類(lèi)型表的外鍵,長(zhǎng)度為2author作者字符串長(zhǎng)度為50price價(jià)格數(shù)值浮點(diǎn)數(shù)amount數(shù)量數(shù)值不小于0的整數(shù)為該數(shù)據(jù)庫(kù)設(shè)計(jì)物理結(jié)構(gòu),以表格形式列出數(shù)據(jù)庫(kù)中各表的字段名、類(lèi)型、主鍵及約束情況。圖書(shū)表(book)圖書(shū)類(lèi)型表(booktype)字段名說(shuō)明數(shù)據(jù)類(lèi)型描述typeid圖書(shū)類(lèi)型編號(hào)字符串長(zhǎng)度為2,主碼typename類(lèi)型名稱(chēng)字符串長(zhǎng)度為5description類(lèi)型描述字符串長(zhǎng)度為50讀者表(reader)字段名說(shuō)明數(shù)據(jù)類(lèi)型描述readerid讀者編號(hào)字符串主鍵,長(zhǎng)度為11readername姓名字符串長(zhǎng)度為50,非空gender性別字符串長(zhǎng)度為1class所在班級(jí)字符串長(zhǎng)度為10借閱卡表(card)字段名說(shuō)明數(shù)據(jù)類(lèi)型描述cardid卡號(hào)字符串長(zhǎng)度為8,主碼readerid讀者編號(hào)字符串引用讀者表的外鍵,長(zhǎng)度為6cardgrade借閱卡等級(jí)數(shù)值0--普通卡,

10--

VIP卡cardtime辦卡時(shí)間DATE借閱情況表(lend)字段名說(shuō)明數(shù)據(jù)類(lèi)型描述bookid圖書(shū)編號(hào)字符串組合主鍵,外鍵,長(zhǎng)度為5cardid卡號(hào)字符串組合主鍵,外鍵,長(zhǎng)度為8lendtime借閱時(shí)間DATE非空returntime歸還時(shí)間DATE項(xiàng)目實(shí)訓(xùn)6為高校圖書(shū)管理系統(tǒng)設(shè)計(jì)SQL編程實(shí)訓(xùn)內(nèi)容1.在高校圖書(shū)管理系統(tǒng)數(shù)據(jù)庫(kù)中建立函數(shù),實(shí)現(xiàn)功能:查詢(xún)某讀者的可借數(shù)量,已知該讀者的借閱卡號(hào)。讀者可參考以下提示。(1)要知道讀者的借閱卡等級(jí),0表示普通卡,10表示VIP卡。(2)普通卡最多可借3本,VIP卡最多可借5本。(3)求出當(dāng)前讀者已借但還未歸還的圖書(shū)數(shù)量。(4)當(dāng)前讀者最多可借數(shù)量減去目前已借但未歸還的數(shù)量即為可借閱數(shù)量。提示:建立函數(shù)代碼如下:CREATEFUNCTIONlendNumber(c_idchar(8))RETURNSINTREADSSQLDATABEGIN DECLAREc_gradeTINYINT;#定義變量存放借閱卡等級(jí) DECLAREnumINT;#定義變量存放讀者已借沒(méi)還的圖書(shū)數(shù)量 SELECTcardgradeINTOc_gradeFROMcardWHEREcardid=c_id;#求該卡的借閱等級(jí) #求該讀者已借但未歸還的數(shù)量 SELECTcount(*)intonumfromlendWHEREcardid=c_idANDreturntimeisnull; #借閱卡等級(jí)為0表示普通卡,最多可借3本,不是0表示vip卡,可借5本IFc_grade=0 THENRETURN(3-num); ELSERETURN(5-num); ENDIF;END2.在高校圖書(shū)管理系統(tǒng)數(shù)據(jù)庫(kù)中建立存儲(chǔ)過(guò)程,實(shí)現(xiàn)某個(gè)讀者的借書(shū)操作。讀者可參考以下提示。(1)判斷當(dāng)前讀者可借閱數(shù)量是否大于0。(2)判斷所借圖書(shū)的庫(kù)存量是否大于0。(3)若滿足上述條件,則產(chǎn)生一條借閱記錄,同時(shí)所借圖書(shū)的庫(kù)存數(shù)量減1。提示:建立存儲(chǔ)過(guò)程代碼如下:CREATEPROCEDURElendbook(INcard_idchar(8),INbook_idchar(5))BEGIN DECLAREnumint; #定義變量存放當(dāng)前已借未還的圖書(shū)數(shù)量 DECLAREc_gradeTINYINT;#定義變量存放借閱卡等級(jí) DECLARElend_numberINT;#定義變量存放可借圖書(shū)數(shù)量 DECLAREbook_numberINT;#定義變量存放該書(shū)庫(kù)存數(shù)量 SELECTcount(*)intonumfromlendWHEREcardid=card_idANDreturntimeisnull; SELECTcardgradeINTOc_gradeFROMcardWHEREcardid=card_id;#求該卡的借閱等級(jí) IF(c_grade=0) THENSETlend_number=3-num; ELSESETlend_number=5-num; ENDIF; SELECTamountintobook_numberfrombookwherebookid=book_id;#求該書(shū)庫(kù)存數(shù)量 if(lend_number>0&&amount>0)#當(dāng)可借圖書(shū)數(shù)量和圖書(shū)庫(kù)存數(shù)量都大于0時(shí)才能借書(shū) THEN insertintolendVALUES(book_id,card_id,now(),null);#向借閱表中添加記錄 UPDATEbooksetamount=amount-1wherebookid=book_id;#將圖書(shū)庫(kù)存數(shù)量減1 ELSEselect'error,can\'tlendbook'; #輸出不能借書(shū)的信息END3.在高校圖書(shū)管理系統(tǒng)數(shù)據(jù)庫(kù)中建立存儲(chǔ)過(guò)程,實(shí)現(xiàn)某個(gè)讀者歸還圖書(shū)。讀者可參考以下提示。(1)找出該筆借閱記錄。(2)更新記錄中的歸還時(shí)間,并且所歸還圖書(shū)的庫(kù)存數(shù)量加1。提示:建立存儲(chǔ)過(guò)程代碼如下:CREATEPROCEDUREreturnbook(INcard_idchar(8),INbook_idchar(5))BEGIN UPDATElendSETreturntime=now()WHEREcardid=card_idandbookid=book_id; updatebookSETamount=amount+1WHEREbookid=book_id;END4.建立觸發(fā)器。當(dāng)新進(jìn)圖書(shū),添加圖書(shū)信息時(shí),將添加圖書(shū)操作的用戶名、操作時(shí)間記錄到圖書(shū)日志表中。提示:首先創(chuàng)建日志表,其次創(chuàng)建觸發(fā)器創(chuàng)建日志表,代碼如下:CREATETABLEinstBookLog(idintauto_incrementPRIMARYkey,usernamechar(10),opertimedatetime);創(chuàng)建觸發(fā)器,代碼如下:CREATETRIGGERtrigger_bookAFTERINSERTONbookFOREACHROWBEGIN insertintoinstBookLog(username,opertime)VALUES(user(),NOW());END項(xiàng)目實(shí)訓(xùn)7為高校圖書(shū)管理系統(tǒng)添加事務(wù)控制實(shí)訓(xùn)內(nèi)容為項(xiàng)目6中建立的高校圖書(shū)管理系統(tǒng)的借書(shū)操作添加事務(wù)控制。提示:在項(xiàng)目實(shí)訓(xùn)6中創(chuàng)建的存儲(chǔ)過(guò)程lendbook中添加事務(wù)開(kāi)始和提交事務(wù)語(yǔ)句。代碼如下:CREATEPROCEDURElendbook(INcard_idchar(8),INbook_idchar(5))BEGIN DECLAREnumint; #定義變量存放當(dāng)前已借未還的圖書(shū)數(shù)量 DECLAREc_gradeTINYINT;#定義變量存放借閱卡等級(jí) DECLARElend_numberINT;#定義變量存放可借圖書(shū)數(shù)量 DECLAREbook_numberINT;#定義變量存放該書(shū)庫(kù)存數(shù)量 STARTTRANSACTION; #開(kāi)始事務(wù) SELECTcount(*)intonumfromlendWHEREcardid=card_idANDreturntimeisnull; SELECTcardgradeINTOc_gradeFROMcardWHEREcardid=card_id;#求該卡的借閱等級(jí) IF(c_grade=0) THENSETlend_number=3-num; ELSESETlend_number=5-num; ENDIF; SELECTamountintobook_numberfrombookwherebookid=book_id;#求該書(shū)庫(kù)存數(shù)量 if(lend_number>0&&amount>0)#當(dāng)可借圖書(shū)數(shù)量和圖書(shū)庫(kù)存數(shù)量都大于0時(shí)才能借書(shū) THEN insertintolendVALUES(book_id,card_id,now(),null);#向借閱表中添加記錄 UPDATEbooksetamount=amount-1wherebookid=book_id; ELSEselect'error,can\'tlendbook'; #輸出不能借書(shū)的信息 ENDIF; COMMIT; #提交事務(wù)END(2)為項(xiàng)目6中建立的高校圖書(shū)管理系統(tǒng)的還書(shū)操作添加事務(wù)控制。提示:在項(xiàng)目實(shí)訓(xùn)6中創(chuàng)建的存儲(chǔ)過(guò)程returnbook中添加事務(wù)開(kāi)始和提交事務(wù)語(yǔ)句。代碼如下:CREATEPROCEDUREreturnbook(INcard_idchar(8),INbook_idchar(5))BEGIN STARTTRANSACTION; #開(kāi)始事務(wù) UPDATElendSETreturntime=now()WHEREcardid=card_idandbookid=book_id; updatebookSETamount=amount+1WHEREbookid=book_id; COMMIT; #提交事務(wù)END項(xiàng)目實(shí)訓(xùn)8維護(hù)高校圖書(shū)管理數(shù)據(jù)庫(kù)的安全性實(shí)訓(xùn)內(nèi)容(1)按照下列要求操作,為圖書(shū)管理數(shù)據(jù)庫(kù)創(chuàng)建用戶,并設(shè)置權(quán)限。①創(chuàng)建用戶reader,設(shè)置密碼為123456。提示:命令代碼如下:CREATEUSER'reader'@'localhost'IDENTIFIEDby'123456';②將用戶reader的密碼修改為'good_luck'。ALTERUSER'reader'@'localhost'IDENTIFIEDby'good_luck';③為用戶reader授予查看圖書(shū)表、讀者表、類(lèi)別表和借閱表的權(quán)限。提示:依次將上述權(quán)限授予給reader用戶,假設(shè)數(shù)據(jù)庫(kù)名為bookManage,命令代碼如下:GRANTSELECTonbookManage.bookTO'reader'@'localhost';GRANTSELECTonbookMa

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論