版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章數(shù)據(jù)庫基礎(chǔ)選擇題C1-2.C1-3.B1-4.B1-5.D1-6.A1-7.A1-8.C1-9.B2.簡答題2-1答:人工管理階段是指計算機誕生的初期(即20世紀50年代后期之前),這個時期的計算機主要用于科學計算。從硬件看,沒有磁盤等直接存取的存儲設備;從軟件看,沒有操作系統(tǒng)和管理數(shù)據(jù)的軟件,數(shù)據(jù)處理方式是批處理。這個時期數(shù)據(jù)管理的特點是:1.數(shù)據(jù)不保存2.沒有對數(shù)據(jù)進行管理的軟件系統(tǒng)3.沒有文件的概念4.一組數(shù)據(jù)對應于一個程序,數(shù)據(jù)是面向應用的文件系統(tǒng)階段是指計算機不僅用于科學計算,而且還大量用于管理數(shù)據(jù)的階段(從50年代后期到60年代中期)。在硬件方面,外存儲器有了磁盤、磁鼓等直接存取的存儲設備。在軟件方面,操作系統(tǒng)中已經(jīng)有了專門用于管理數(shù)據(jù)的軟件,稱為文件系統(tǒng)。這個時期數(shù)據(jù)管理的特點:1.數(shù)據(jù)需要長期保存在外存上供反復使用2.程序之間有了一定的獨立性3.文件的形式已經(jīng)多樣化4.數(shù)據(jù)的存取基本上以記錄為單位數(shù)據(jù)庫系統(tǒng)階段是從60年代后期開始的。在這一階段中,數(shù)據(jù)庫中的數(shù)據(jù)不再是面向某個應用或某個程序,而是面向整個企業(yè)(組織)或整個應用的。這個時期數(shù)據(jù)管理的特點是:1.采用復雜的結(jié)構(gòu)化的數(shù)據(jù)模型2.較高的數(shù)據(jù)獨立性3.最低的冗余度4.數(shù)據(jù)控制功能2-2答:三級模式包括外模式、概念模式、內(nèi)模式,三級模式能有效地組織、管理數(shù)據(jù),提高了數(shù)據(jù)庫的邏輯獨立性和物理獨立性。二級映射指的是對象關(guān)系映射(ORM)是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將面向?qū)ο笳Z言程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中。第2章MySQL數(shù)據(jù)類型選擇題1-1.A1-2.A1-3.D1-4.A1-5.C2.填空題2-1.浮點數(shù)2-2.CHAR,2552-3.NULL,NOTNULL2-4.ENUM('待支付','已支付','已取消')2-5.DECIMAL(6,2)第3章MySQL運算符1.A2.A3.D4.A5.AC第4章數(shù)據(jù)庫操作 1.選擇題1-1.B1-2.D1-3.C1-4.A1-5.C1-6.C1-7.D 2.簡答題 2-1答: 在MySQL的安裝目錄下能找到一個名為my.ini的配置文件。該文件中的mysqld部分存在“default-storage-engine=INNODB”語句。將該語句的“INNODB”改為需要的存儲引擎。該配置文件只有重啟服務后才會生效。執(zhí)行SHOWVARIABLESLIKE‘storage_engine’查看默認存儲引擎是否修改成功。 2-2答:MyISAM與InnoDB存儲引擎的5大區(qū)別:(1)InnoDB支持事務,而MyISAM不支持事務(2)InnoDB支持行級鎖,而MyISAM支持表級鎖(3)InnoDB支持MVCC,而MyISAM不支持(4)InnoDB支持外鍵,而MyISAM不支持(5)InnoDB不支持全文索引,而MyISAM支持 3.上機操作 3-1答: CREATEDATABASEemployee;SHOWDATABASES;DROPDATABASEIFEXITSemployee;SHOWDATABASES; 3-2答: (1)showengines;//查看mysql所支持的存儲引擎,以及從中得到mysql默認的存儲引擎。showvariableslike'%storage_engine';//查看mysql默認的存儲引擎SHOWVARIABLESLIKE'default_storage_engine%';第5章數(shù)據(jù)表操作 1.選擇題1-1.D1-2.B1-3.C1-4.A1-5.C1-6.B1-7.D1-8.B1-9.C1-10.C 2.上機操作 2-1答:(1)CREATETABLEanimal(idintprimarykeyauto_increment,nameVARCHAR(20),kindsVARCHAR(8)notnull,legsint,behaviorVARCHAR(50));(2)altertableanimalmodifynamevarchar(20)notnull;(3)altertableanimalmodifybehaviorVARCHAR(50)afterkinds;(4)altertableanimaladdfurvarchar(10);(5)altertableanimaldroplegs;(6)altertableanimalrenameanimalInfo; 2-2答:CREATETABLE部門(部門號NUMBER(2),部門名VARCHAR(10),經(jīng)理名VARCHAR(10),電話Char(12)CONSTRAINTPK_SCRIMARYKEY(部門號));CREATETABLE職工(職工號NUMBER(4),姓名VARCHAR(10),年齡NUMBER(2),CONSTRAINTC1CHECK(年齡<=60),職務VARCHAR(9),工資NUMBER(7,2),部門號NUMBER(2),CONSTRAINTFK_DEPTNOFOREIGNKEY(部門號)REFFERENCES部門(部門號));第6章數(shù)據(jù)操作選擇題B1-2.C1-3.B1-4.B1-5.A1-6.D1-7.B1-8.A1-9.D1-10.B2.簡答題:2-1答:若數(shù)據(jù)庫中有若干個表,表與表之間相互關(guān)聯(lián)。表關(guān)聯(lián)則會生成外鍵強制約束的問題,刪除數(shù)據(jù)時,MYSQL會檢查表間的關(guān)聯(lián)關(guān)系,如果該數(shù)據(jù)所在表與其他表相關(guān)聯(lián),就會導致無法刪除,出現(xiàn)上述問題。解決方案:A.修改FOREIGN_KEY_CHECKS,取消外鍵檢驗:SETFOREIGN_KEY_CHECKS=0;B.進行表內(nèi)數(shù)據(jù)的刪除C.再恢復外鍵約束:SETFOREIGN_KEY_CHECKS=1;2-2答:A.插入一條完整的數(shù)據(jù)記錄行,其命令如下:B.插入多條數(shù)據(jù)記錄行,其命令如下:C.插入數(shù)據(jù)記錄行的一部分,其命令如下:D.插入檢索查詢得到的數(shù)據(jù)記錄,其命令如下:2-3答:其命令如下:3.上機操作:3-1答:A.創(chuàng)建供應數(shù)據(jù)庫,在供應數(shù)據(jù)庫中使用SQL語句創(chuàng)建下列表。其命令如下:向供應商表中插入一條完整的數(shù)據(jù)行,(1)其值為:('S001','鴻運彩鋼廠','黑龍江省哈爾濱市',)。其命令如下:(2)向供應商表中一次性插入多條完整的數(shù)據(jù)行,其值為:('S002','好運來木材廠','黑龍江省牡丹江市',),('S003','程實水泥廠','吉林省白城市',),('S004','洪城磚廠','吉林省吉林市',),('S005','天旺零件廠','黑龍江省哈爾濱市',)。其命令如下:(3)向工程表中一次性插入多條完整的數(shù)據(jù)行,其值為:('p001','學校寢室樓改造','黑龍江省哈爾濱市'),('p002','化工路改造','黑龍江省哈爾濱市'),('p003','云上小區(qū)','吉林省長春市')。其命令如下:(4)向零件表中一次性插入多條完整的數(shù)據(jù)行,其值為:('g001','彩鋼房','藍色','二層藍色彩鋼房'),('g002','彩鋼房','白色','三層白色彩鋼房'),('g003','土石混合料','紅色','水泥石子沙子混合比為1:2:3'),('g004','標準磚','紅色','標準磚的尺寸為240mm×115mm×53mm'),('g005','上下鋪','棕色','上下鋪總共2.1米'),('g006','床鋪','棕色','上鋪下桌'),('g007','螺絲','銀色','M14*40')。其命令如下:(5)向供應表中一次性插入多條完整的數(shù)據(jù)行,其值為:('s001','p001','g001',5),('s001','p001','g002',4),('s002','p001','g005',100),('s001','p001','g006',700),('s001','p002','g001',2),('s001','p002','g002',1),('s003','p002','g003',500),('s001','p003','g001',10),('s001','p003','g002',3),('s004','p003','g004',10000),('s005','p003','g007',5000);3-2答:執(zhí)行SQL語句,將供應表中供應商編號為s001的數(shù)量全部更新為6。其命令如下:3-3答:執(zhí)行SQL語句,刪除零件表中零件編號為g007的數(shù)據(jù)行。其命令如下:第7章數(shù)據(jù)查詢1.選擇題1-1.D1-2.D1-3.C1-4.D1-5.C1-6.D1-7.D1-8.C1-9.C1-10.C2.簡答題2-1答:A.簡單數(shù)據(jù)記錄查詢,其語法形式為select字段from表明B.條件數(shù)據(jù)記錄查詢,其語法形式為where+子句C.排序數(shù)據(jù)記錄查詢,其語法形式為orderby字段D.統(tǒng)計函數(shù)和分組數(shù)據(jù)記錄,其語法形式為groupby字段having條件E.限制數(shù)據(jù)記錄查詢數(shù)量,其語法形式為limit結(jié)果顯示行數(shù)2-2答:A.內(nèi)連接innerJoin:查詢結(jié)果只顯示滿足條件的數(shù)據(jù)行B.左外連接leftouterjoin:查詢結(jié)果顯示滿足條件的數(shù)據(jù)行以及左側(cè)表中的全部行數(shù)據(jù)。C.右外連接rightouterjoin:查詢結(jié)果顯示滿足條件的數(shù)據(jù)行以及右側(cè)表中的全部行數(shù)據(jù)D.交叉連接:查詢結(jié)果顯示多個表中所有行數(shù)據(jù)的組合,表之間進行笛卡爾積操作。2-3答:A.存放于WHERE子句中的子查詢:存放于WHERE子句中的子查詢支持列子查詢和行子查詢,子查詢一般返回一行一列、多行一列或者一行多列的數(shù)據(jù)記錄集合。B.存放于FROM子句中的子查詢:存放于FROM子句中的子查詢主要支持表子查詢。此時,子查詢一般返回多行多列數(shù)據(jù)記錄集合,可以將查詢結(jié)果集合作為一張臨時表。3.上機操作答:示例要求:登錄MySQL數(shù)據(jù)庫管理系統(tǒng),基于上一章創(chuàng)建的供應數(shù)據(jù)庫以及其中的供應商表、工程表、零件表以及供應表;使用select語句對供應數(shù)據(jù)庫中的數(shù)據(jù)進行查詢操作。(1)查詢所有供應商名和地址。其命令如下:(2)查詢顏色為棕色的零件編號,零件名以及顏色。其命令如下:(3)查詢使用供應商s004所供應零件的工程編號。其命令如下:(4)查詢工程項目p002使用的各種零件的名稱及數(shù)量。其命令如下:(5)查詢廠商s001供應的所有零件de編號和零件名,且要求無重復值存在。其命令如下:(6)查詢聯(lián)系電話以133開頭的供應商編號、供應商名以及聯(lián)系電話(兩種方式:正則表達式、like關(guān)鍵字)。其命令如下:(7)查詢沒有使用零件g001和g002的工程編號、工程名以及地址(子查詢)。其命令如下:(8)查詢使用s001供應商生產(chǎn)的棕色零件的工程編號。其命令如下:(9)查詢工程p001使用的零件編號,以及各零件的整體數(shù)量,按照升序排列。其命令如下:第8章視圖與索引1.選擇題1-1.D1-2.C1-3.D1-4.D1-5.A 1-6.A1-7.C1-8.D2.簡答題2-1答: 兩者的區(qū)別:(1)視圖是按照SQL語句生成的一個虛擬的表。(2)視圖不占實際的物理空間,而表中的記錄需要占物理空間。(3)建立和刪除視圖只影響視圖本身,不會影響實際的記錄。而建立和刪除表會影響實際的記錄。兩者的聯(lián)系:視圖是在基本表上建立的表,其字段和記錄都來自基本表,其依賴基本表而存在一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象,在邏輯意義上建立的新關(guān)系。 2-2答:索引建立在一個或者幾個字段上。建立了索引后,表中的數(shù)據(jù)就按照索引的一定規(guī)排列。這樣可以提高查詢速度。主鍵是表中數(shù)據(jù)的唯一標識。不同的記錄的主鍵值不同。例如,身份證好比主鍵,每個身份證號都可以唯一的確定一個人。在建立主鍵時,系統(tǒng)會自動建立一個唯一性索引。唯一性也是建立在表中一個或者幾個字段上。其目的是為了對于不同的記錄,具有唯一性的字段的值是不同的。 3.上機操作 答:create[algorithm=undefined]viewview_an(id,name,kind)asselectid,name,kindsfromanimalwithcheckoption; 注:algorithm=undefined參數(shù)可以不顯式體現(xiàn)在代碼中,因為algorithm參數(shù)的默認值既是undefined。(2)①Insertintoview_anvalues(10,’熊’,’哺乳’);②Insertintoview_anvalues(10,NULL,’哺乳’);③Insertintoview_anvalues(10,’馬’,NULL); 以上①、②、③條語句為在視圖view_an中插入的三條語句,查看是否插入成功則用select命令,其代碼如下。 SELECT*FROMview_an; 代碼運行成功后,對于語句①通過結(jié)果可以看到插入成功,而語句②和語句③則插入失敗,因為在創(chuàng)建視圖view_an時使用了withcheckoption參數(shù)約束了插入元組的中的id,name,kind屬性的值都不允許為空。 (3)createorreplaceviewview_an(id,name,kind)asselectid,name,kindsfromanimalWHEREkinds=’哺乳’withcheckoption; 或者 ALTERviewview_an(id,name,kind)asselectid,name,kindsfromanimalWHEREkinds=’哺乳’withcheckoption;dropviewview_an;Createuniqueindexindex_idonanimal(id);Createfulltextindexindex_havioronanimal(behavior);Dropindexindex_havioronanimal;第9章觸發(fā)器選擇題B1-2.D1-3.C1-4.D1-5.C1-6.B1-7.D1-8.A1-9.C1-10.D簡答題2-1答:觸發(fā)器是一種與表操作有關(guān)的數(shù)據(jù)庫對象,在預定義的事件發(fā)生時,觸發(fā)程序就會被MySQL自動調(diào)用。觸發(fā)器經(jīng)常用于實現(xiàn)加強數(shù)據(jù)的完整性約束和業(yè)務規(guī)則、跟蹤監(jiān)控用戶對數(shù)據(jù)庫的操作等功能,總的來說,觸發(fā)器可以提高系統(tǒng)的自動化程度,增強系統(tǒng)的靈活性和可靠性,并幫助開發(fā)人員更好地控制和管理系統(tǒng)的行為。2-2答:按照觸發(fā)事件分類有三類,分別為INSERT觸發(fā)器、UPDATE觸發(fā)器和DELETE觸發(fā)器。INSERT:在表中新增新數(shù)據(jù)時激活觸發(fā)器。UPDATE:在表中更新數(shù)據(jù)時激活觸發(fā)器。DELETE:從表中刪除數(shù)據(jù)時激活觸發(fā)器。按照觸發(fā)時刻分類有兩類,分別是BEFORE觸發(fā)器和AFTER觸發(fā)器。BEFORE:在觸發(fā)事件發(fā)生之前觸發(fā)程序。AFTER:在觸發(fā)事件發(fā)生之后觸發(fā)程序。2-3答:濫用觸發(fā)器可能導致以下幾個方面的影響:性能問題:觸發(fā)器是在數(shù)據(jù)庫中執(zhí)行的邏輯代碼,如果觸發(fā)器邏輯復雜或不合理,可能會對數(shù)據(jù)庫的性能產(chǎn)生負面影響。頻繁的觸發(fā)器執(zhí)行可能導致響應時間延遲和系統(tǒng)性能下降。死鎖和循環(huán)觸發(fā):如果觸發(fā)器邏輯導致了循環(huán)觸發(fā)的情況,可能會產(chǎn)生死鎖問題,導致數(shù)據(jù)庫無法正常運行。例如,觸發(fā)器A觸發(fā)了觸發(fā)器B,而觸發(fā)器B又觸發(fā)了觸發(fā)器A,形成了一個無限循環(huán)。數(shù)據(jù)不一致性:不恰當?shù)挠|發(fā)器邏輯可能導致數(shù)據(jù)一致性問題。如果觸發(fā)器邏輯有錯誤或邏輯不完善,可能會導致數(shù)據(jù)更新不正確或數(shù)據(jù)丟失等問題。調(diào)試和維護困難:濫用觸發(fā)器可能增加代碼的復雜性和耦合性,使調(diào)試和維護變得困難。當存在多個復雜的觸發(fā)器時,定位問題和診斷錯誤可能會更加困難。因此,在使用觸發(fā)器時,需要謹慎設計、監(jiān)控和測試觸發(fā)器的邏輯,確保其合理性、可靠性和性能方面的考慮。在某些情況下,可以考慮使用其他方式替代觸發(fā)器,避免潛在的問題和風險。上機操作答:a.創(chuàng)建日志表,包含操作用戶、時間、操作類別和詳細信息。CREATETABLE日志(操作用戶VARCHAR(30),時間TIMESTAMP,操作類別VARCHAR(10),詳細信息VARCHAR(50));b.創(chuàng)建供應商新增觸發(fā)器、供應商修改觸發(fā)器、供應商刪除觸發(fā)器。--供應商新增觸發(fā)器CREATETRIGGERtr_供應商_insertAFTERINSERTON供應商FOREACHROWINSERTINTO日志VALUES(user(),now(),'INSERT',concat(NEW.供應商編號,NEW.供應商名,NEW.供應商地址,NEW.聯(lián)系電話));--供應商修改觸發(fā)器CREATETRIGGERtr_供應商_updateAFTERUPDATEON供應商FOREACHROWINSERTINTO日志VALUES(user(),now(),'UPDATE',CONCAT('修改前:',OLD.供應商編號,OLD.供應商名,OLD.供應商地址,OLD.聯(lián)系電話));--供應商刪除觸發(fā)器CREATETRIGGERtr_供應商_deleteAFTERDELETEON供應商FOREACHROWINSERTINTO日志VALUES(user(),now(),'DELETE',concat(OLD.供應商編號,OLD.供應商名,OLD.供應商地址,OLD.聯(lián)系電話));c.在供應商表中新增一條記錄,并查看日志表結(jié)果。INSERTINTO供應商(供應商編號,供應商名,供應商地址,聯(lián)系電話)values('S001','鴻運彩鋼廠','黑龍江省哈爾濱市',);SELECT*FROM日志;圖9-1顯示供應商新增觸發(fā)器觸發(fā)結(jié)果修改供應商表供應商編號為'S001'的記錄,將供應商地址修改為'黑龍江省齊齊哈爾市',聯(lián)系電話修改為,并查看日志表結(jié)果。UPDATE供應商SET供應商地址='黑龍江省齊齊哈爾市',聯(lián)系電話=WHERE供應商編號='S001';SELECT*FROM日志;圖9-2顯示供應商修改觸發(fā)器觸發(fā)結(jié)果刪除供應商表供應商編號為'S001'的記錄,并查看日志表結(jié)果。DELETEFROM供應商WHERE供應商編號='S001';SELECT*FROM日志;圖9-3顯示供應商刪除觸發(fā)器觸發(fā)結(jié)果a.創(chuàng)建供應備份表,復制供應表的結(jié)構(gòu)和數(shù)據(jù)。CREATETABLE供應備份select*from供應;b.創(chuàng)建供應新增觸發(fā)器、供應商修改觸發(fā)器、供應商刪除觸發(fā)器,實現(xiàn)將供應表信息同步到供應備份表。--供應新增觸發(fā)器CREATETRIGGERtr_供應_insertAFTERINSERTON供應FOREACHROWINSERTINTO供應備份VALUES(NEW.供應商編號,NEW.工程編號,NEW.零件編號,NEW.數(shù)量);--供應修改觸發(fā)器CREATETRIGGERtr_供應_updateAFTERUPDATEON供應FOREACHROWUPDATE供應備份SET數(shù)量=NEW.數(shù)量WHERE供應商編號=NEW.供應商編號AND工程編號=NEW.工程編號AND零件編號=NEW.零件編號;--供應刪除觸發(fā)器CREATETRIGGERtr_供應_deleteAFTERDELETEON供應FOREACHROWDELETEFROM供應備份WHERE供應商編號=OLD.供應商編號AND工程編號=OLD.工程編號AND零件編號=OLD.零件編號;在供應表中新增兩條記錄,并查看供應備份表結(jié)果。INSERTINTO供應VALUES('S001','p001','g001',5),('S001','p001','g002',4);SELECT*FROM供應備份;圖9-4顯示供應新增觸發(fā)器觸發(fā)結(jié)果修改供應表供應商編號為'S001',工程編號為'p001',零件編號為'g001'的記錄,將數(shù)量修改為10,并查看供應備份表結(jié)果。UPDATE供應SET數(shù)量=10WHERE供應商編號='s001'AND工程編號='p001'AND零件編號='g001';SELECT*FROM供應備份;圖9-5顯示供應修改觸發(fā)器觸發(fā)結(jié)果刪除供應表供應商編號為'S001',工程編號為'p001',零件編號為'g001'的記錄,并查看供應備份表結(jié)果。DELETEFROM供應WHERE供應商編號='s001'AND工程編號='p001'AND零件編號='g001';SELECT*FROM供應備份;圖9-6顯示供應刪除觸發(fā)器觸發(fā)結(jié)果第10章存儲過程和函數(shù)選擇題B1-2.B1-3.A1-4.B1-5.D1-6.C1-7.A1-8.C1-8.D1-9.C簡答題2-1答:存儲過程是一組預先編譯好用于完成特定功能的SQL語句集合,存儲在數(shù)據(jù)庫服務器端,客戶端只需要向服務器端發(fā)出調(diào)用存儲過程的命令,服務器端就可以把這一組SQL語句全部執(zhí)行。--創(chuàng)建存儲過程CREATEPROCEDURE存儲過程名([IN|OUT|INOUT參數(shù)名參數(shù)類型[,...]])[characteristics...]BEGIN存儲過程主體;END--調(diào)用存儲過程CALL存儲過程名([參數(shù)值[,...]]);--刪除存儲過程DROPPROCEDURE[IFEXISTS]存儲過程名;2-2答:存儲函數(shù)是一種在數(shù)據(jù)庫中定義、編譯和保存的可重復執(zhí)行的函數(shù)。它可以接受參數(shù),并返回一個值作為結(jié)果。與存儲過程相比,主要區(qū)別如下:返回結(jié)果:存儲過程通常用于執(zhí)行一系列的操作,返回結(jié)果靈活。而存儲函數(shù)則必須返回一個結(jié)果值。使用方式:存儲過程通過調(diào)用并執(zhí)行的方式使用,而存儲函數(shù)可以像普通函數(shù)一樣在表達式中使用。參數(shù)傳遞:存儲過程和存儲函數(shù)都可以接受參數(shù),但存儲過程可以使用傳入?yún)?shù)改變數(shù)據(jù),而存儲函數(shù)只能使用傳入?yún)?shù)進行計算并返回結(jié)果??傊?,存儲過程和存儲函數(shù)都是在數(shù)據(jù)庫中定義的可重復執(zhí)行的代碼塊,但存儲過程主要用于執(zhí)行操作而存儲函數(shù)主要用于計算和返回結(jié)果。2-3答:可以使用ALTERPROCEDURE語句修改存儲過程的某些特征。如果要修改存儲過程的內(nèi)容則需要通過刪除原存儲過程,再以相同的命名創(chuàng)建新的存儲過程的方式來實現(xiàn)。2-4答:存儲過程的參數(shù)有三類,分別為輸入?yún)?shù)(IN)、輸出參數(shù)(OUT)、輸入輸出參數(shù)(INTOU)。IN:當前參數(shù)為輸入?yún)?shù),存儲過程只是讀取這個參數(shù)的值。如果沒有定義參數(shù)種類,默認為IN。OUT:當前參數(shù)為輸出參數(shù),該類新的參數(shù)由存儲過程寫入,調(diào)用這個存儲過程的客戶端或者應用程序可以讀取這個參數(shù)返回的值。INOUT:同時具有IN參數(shù)和OUT參數(shù)的特性,在過程中可以讀取和寫入該類型的參數(shù)。上機操作答:創(chuàng)建存儲過程total_proc,實現(xiàn)統(tǒng)計供應商、工程、零件總數(shù)功能。DELIMITER//CREATEPROCEDUREtotal_proc(OUTo_供應商_totalfloat,OUTo_工程_totalfloat,OUTo_零件_totalfloat)BEGINSELECTCOUNT(*)INTOo_供應商_totalFROM供應商;SELECTCOUNT(*)INTOo_工程_totalFROM工程;SELECTCOUNT(*)INTOo_零件_totalFROM零件;END//DELIMITER;調(diào)用存儲過程total_proc,并查看調(diào)用結(jié)果。CALLtotal_proc(@供應商總數(shù),@工程總數(shù),@零件總數(shù));SELECT@供應商總數(shù),@工程總數(shù),@零件總數(shù);圖10-1顯示存儲過程total_proc調(diào)用結(jié)果新增存儲函數(shù)total_func,實現(xiàn)統(tǒng)計給定零件在給定工程中的使用數(shù)量功能。DELIMITER//CREATEFUNCTIONtotal_func(i_零件編號char(10),i_工程編號char(10))RETURNSfloatDETERMINISTICBEGINRETURN(SELECTsum(數(shù)量)FROM供應WHERE零件編號=i_零件編號AND工程編號=i_工程編號);END//DELIMITER;調(diào)用存儲過程total_proc,并查看調(diào)用結(jié)果。SELECTtotal_func('g001','p001');圖10-2顯示存儲函數(shù)total_func調(diào)用結(jié)果刪除以上存儲過程total_proc和存儲函數(shù)total_func。DROPPROCEDUREIFEXISTStotal_proc;DROPFUNCTIONIFEXISTStotal_func;圖10-3顯示刪除存儲過程total_proc和存儲函數(shù)total_func后結(jié)果第11章用戶管理選擇題1-1.D1-2.A1-3.C1-4.C1-5.A1-6.B1-7.C1-8.B1-9.B1-10.B簡答題2-1答:CREATEUSER用戶名@主機名[IDENTIFIEDBY[PASSWORD]密碼]DROPUSER用戶名@主機名2-2答:GRANT權(quán)限(列名,...),...ON數(shù)據(jù)庫名.表名TO用戶名@主機名GRANT數(shù)據(jù)庫權(quán)限,...ON*.*TO用戶名@主機名2-3答:可以使用REVOKE語句來撤銷MySQL用戶對特定數(shù)據(jù)庫的訪問權(quán)限。例如:REVOKEALLPRIVILEGESONdatabase.*FROM'username'@'hostname';2-4答:可以使用GRANT語句和SHOWGRANTS語句組合來實現(xiàn)。先使用SHOWGRANTS語句生成授權(quán)語句,然后使用GRANT語句將這些權(quán)限授予給另一個用戶。上機操作答:創(chuàng)建apply1、apply2和apply3這三個用戶,并在user表中查詢這些用戶。CREATEUSERapply1@localhostIDENTIFIEDBY'12345',apply2@localhostIDENTIFIEDBY'12345',apply3@localhostIDENTIFIEDBY'12345';SELECTUser,HostFROMuserWHEREUser='apply1'orUser='apply2'orUser='apply3';圖11-1顯示創(chuàng)建用戶apply1、apply2、apply3結(jié)果向用戶apply1授權(quán),并查看該用戶權(quán)限。GRANTSELECTON供應.*TOapply1@localhostWITHGRANTOPTION;SHOWGRANTSFORapply1@localhost;圖11-2顯示用戶apply1授權(quán)結(jié)果向用戶apply2授權(quán),并查看該用戶權(quán)限。GRANTINSERT,DELETE,UPDATE(供應商地址,聯(lián)系電話)ON供應.供應商TOapply2@localhost;GRANTINSERT,DELETE,UPDATE(地址)ON供應.工程TOapply2@localhost;GRANTINSERT,DELETEON供應.零件TOapply2@localhost;SHOWGRANTSFORapply2@localhost;圖11-3顯示用戶apply2授權(quán)結(jié)果向用戶apply3授權(quán),并查看該用戶權(quán)限。GRANTALLON供應.供應TOapply3@localhost;SHOWGRANTSFORapply3@localhost;圖11-4顯示用戶apply3授權(quán)結(jié)果撤銷用戶apply3的所有權(quán)限,并查看該用戶權(quán)限。REVOKEALL,GRANTOPTIONFROMapply3@localhost;SHOWGRANTSFORapply3@localhost;圖11-5顯示用戶apply3撤銷權(quán)限結(jié)果刪除用戶apply2,并查看apply1、apply2和apply3三個用戶。DROPUSERapply2@localhost;SELECTUser,HostFROMuserWHEREUser='apply1'orUser='apply2'orUser='apply3';圖11-6顯示刪除用戶apply2結(jié)果第12章數(shù)據(jù)備份與還原1.選擇題1-1.B1-2.A1-3.C1-4.B1-5.A2.簡答題2-1答:mysqldump備份的文本文件實際上是數(shù)據(jù)庫的一個副本,使用該文件不僅可以在MySQL中恢復數(shù)據(jù)庫,而且通過對該文件的簡單修改,使用該文件在SQLServer或者Sybase等其他數(shù)據(jù)庫中恢復數(shù)據(jù)庫。這在某種程度上實現(xiàn)了數(shù)據(jù)庫之間的遷移。2-2答:根據(jù)數(shù)據(jù)庫表的存儲引擎的類型不同,備份表的方法也不一樣。對于MyISAM類型的表,可以直接復制MySQL數(shù)據(jù)文件夾,復制數(shù)據(jù)文件夾時需要將MySQL服務停止,否則可能會出現(xiàn)異常。mysqldump命令是非常安全的備份方法,它既適合MyISAM類型的表,又適合InnoDB類型的表。第13章日志管理 1.選擇題1-1.C1-2.A1-3.B1-4.A1-5.C 1-6.B1-7.D1-8.D1-9.B 2.簡答題2-1.答:事務是用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。事務具有4個特性:原子性,一致性、隔離性和持續(xù)性。2-2.答:當多個事務并發(fā)地存取數(shù)據(jù)庫時就會產(chǎn)生同時讀取或修改同一數(shù)據(jù)的情況,若對并發(fā)操作不加控制就可能會存取和存儲不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性,所以數(shù)據(jù)庫管理系統(tǒng)必須提供并發(fā)控制機制。2-3.答:封鎖就是事務T在對某個數(shù)據(jù)對象操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后的事務就對該數(shù)據(jù)對象有了一定的控制,在事務T釋放它的鎖之前,其他的事務不能更新此數(shù)據(jù)對象.2-4.答:基本的封鎖有兩種:排他鎖和共享鎖排他鎖又稱為寫鎖,若事務T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A,其他任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖。這就保證了其他事務在T釋放A上的鎖之前不能再讀取和修改A.共享鎖又稱讀鎖。若事務T對數(shù)據(jù)對象A加上S鎖,則事務T可以讀A但不能修改A,其他事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。這就保證了其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何的修改。第14章Java操作MySQL數(shù)據(jù)庫上機操作:示例要求:連接MySQL數(shù)據(jù)庫,基于Java語言,對供應數(shù)據(jù)庫中的零件Item表、工程Project表、供應商Supplier表以及供應Supply表進行數(shù)據(jù)的增刪改查操作。其實現(xiàn)過程如下所示:使用Java語言連接供應數(shù)據(jù)庫;importjava.sql.*;
publicclassDBConnection{
//驅(qū)動
publicstaticfinalStringdriverName="com.mysql.cj.jdbc.Driver";
//數(shù)據(jù)庫地址
publicstaticfinalStringurl="jdbc:mysql://localhost:3306/供應?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8&allowPublicKeyRetrieval=true";
//數(shù)據(jù)庫用戶名
publicstaticfinalStringuser="root";
//數(shù)據(jù)庫密碼
publicstaticfinalStringpassword="password";
publicstaticConnectionconnection=null;
//獲取數(shù)據(jù)庫連接
publicstaticConnectiongetConnection()throwsSQLException{
try{
Class.forName(driverName);
connection=DriverManager.getConnection(url,user,password);
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
returnconnection;
}
//釋放數(shù)據(jù)庫連接
publicstaticvoidclose(ResultSetrs,Statementst,Connectionconn){
try{
if(rs!=null){
rs.close();
}
}catch(SQLExceptione){
e.printStackTrace();
}finally{
try{
if(st!=null){
st.close();
}
}catch(SQLExceptione){
e.printStackTrace();
}finally{
if(conn!=null){
try{
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
}
}
}
}創(chuàng)建工程Project類;查詢工程Project表中的所有數(shù)據(jù);向工程Project表中增加一行完整的數(shù)據(jù)行,各字段值為("p004","云上小區(qū)","吉林省長春市");在工程Project表中,修改工程編號為p004的數(shù)據(jù)行,將工程名更新為學校寢室樓改造,地址更改為黑龍江省哈爾濱市;查詢工程編號為p004的所有數(shù)據(jù);在工程Project表中,刪除工程編號為p004的數(shù)據(jù)行;importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.ArrayList;
//工程類
classProject{
privateStringno;
privateStringname;
privateStringaddress;
publicProject(){
}
publicProject(Stringno,Stringname,Stringaddress){
this.no=no;
=name;
this.address=address;
}
@Override
publicStringtoString(){
return"Project{"+
"no='"+no+'\''+
",name='"+name+'\''+
",address='"+address+'\''+
'}';
}
publicStringgetAddress(){
returnaddress;
}
publicvoidsetAddress(Stringaddress){
this.address=address;
}
publicStringgetNo(){
returnno;
}
publicvoidsetNo(Stringno){
this.no=no;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
}//工程Project表增刪改查
publicclassProjectDao{
//添加
publicstaticvoidadd(Projectp){
try{
Connectioncon=DBConnection.getConnection();
Stringsql="insertinto`工程`values('"+p.getNo()+"'"
+",?"
+",?"
+")";
PreparedStatementps=con.prepareStatement(sql);
ps.setString(1,p.getName());
ps.setString(2,p.getAddress());
ps.executeUpdate();
DBConnection.close(null,ps,con);
}catch(SQLExceptione){
e.printStackTrace();
}
}
//修改
publicstaticvoidupdate(Projectp){
try{
Connectioncon=DBConnection.getConnection();
Stringsql="update`工程`set"+
"`工程名`=?"+
",`地址`=?"+
"where`工程編號`='"+p.getNo()+"'";
PreparedStatementps=con.prepareStatement(sql);
ps.setString(1,p.getName());
ps.setString(2,p.getAddress());
ps.executeUpdate();
DBConnection.close(null,ps,con);
}catch(SQLExceptione){
e.printStackTrace();
}
}
//刪除
publicstaticvoiddelete(Stringno){
try{
Connectioncon=DBConnection.getConnection();
Stringsql="deletefrom`工程`where`工程編號`=?";
PreparedStatementps=con.prepareStatement(sql);
ps.setString(1,no);
ps.executeUpdate();
DBConnection.close(null,ps,con);
}catch(SQLExceptione){
e.printStackTrace();
}
}
//獲取全部列表
publicstaticArrayList<Project>getList(){
ArrayList<Project>list=newArrayList<Project>();
try{
Connectioncon=DBConnection.getConnection();
Stringsql="select*from`工程`";
PreparedStatementps=con.prepareStatement(sql);
ResultSetrs=ps.executeQuery();
while(rs.next()){
Projectp=newProject();
p.setNo(rs.getString(1));
p.setName(rs.getString(2));
p.setAddress(rs.getString(3));
list.add(p);
}
DBConnection.close(rs,ps,con);
}catch(SQLExceptione){
e.printStackTrace();
}
returnlist;
}
//按編號查詢
publicstaticProjectfindNo(Stringfind){
try{
Connectioncon=DBConnection.getConnection();
Stringsql="select*from`工程`where`工程編號`=?";
PreparedStatementps=con.prepareStatement(sql);
ps.setString(1,find);
ResultSetrs=ps.executeQuery();
if(rs.next()){
Projectp=newProject();
p.setNo(rs.getString(1));
p.setName(rs.getString(2));
p.setAddress(rs.getString(3));
returnp;
}
DBConnection.close(rs,ps,con);
}catch(SQLExceptione){
e.printStackTrace();
}
returnnull;
}
//測試
publicstaticvoidtest(){
Projectp=newProject("p004","云上小區(qū)","吉林省長春市");
System.out.println("測試工程增刪改查");
System.out.println("\n查詢?nèi)?);
for(ProjectProject:getList()){
System.out.println(Project);
}
System.out.println("\n增加工程后,查詢?nèi)?);
add(p);
for(ProjectProject:getList()){
System.out.println(Project);
}
System.out.println("\n修改工程后,查詢?nèi)?);
p.setName("學校寢室樓改造");
p.setAddress("黑龍江省哈爾濱市");
update(p);
for(ProjectProject:getList()){
System.out.println(Project);
}
System.out.println("\n查詢工程號"+p.getNo());
System.out.println(findNo(p.getNo()));
System.out.println("\n刪除工程后,查詢?nèi)?);
delete(p.getNo());
for(ProjectProject:getList()){
System.out.println(Project);
}
}
}執(zhí)行結(jié)果如圖所示:創(chuàng)建零件Item類。查詢零件Item表中的所有數(shù)據(jù);向零件Item表中插入一行完整的數(shù)據(jù)行,各字段值為("g008","彩鋼房","藍色","二層藍色彩鋼房");在零件Item表中,修改零件編號為g008的數(shù)據(jù)行,將零件名稱更新為土石混合料,顏色更新為白色;查詢零件Item表中,零件編號為g008的全部信息;刪除零件Item表中,零件編號為g008的數(shù)據(jù)行。importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.ArrayList;
//零件類
classItem{
privateStringno;
privateStringname;
privateStringcolor;
privateStringbrief;
publicItem(){
}
publicStringgetBrief(){
returnbrief;
}
publicvoidsetBrief(Stringbrief){
this.brief=brief;
}
publicItem(Stringno,Stringname,Stringcolor,Stringbrief){
this.no=no;
=name;
this.color=color;
this.brief=brief;
}
@Override
publicStringtoString(){
return"Item{"+
"no='"+no+'\''+
",name='"+name+'\''+
",color='"+color+'\''+
",brief='"+brief+'\''+
'}';
}
publicStringgetColor(){
returncolor;
}
publicvoidsetColor(Stringcolor){
this.color=color;
}
publicStringgetNo(){
returnno;
}
publicvoidsetNo(Stringno){
this.no=no;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
}
//jdbc增刪改查
publicclassItemDao{
//添加
publicstaticvoidadd(Itemp){
try{
Connectioncon=DBConnection.getConnection();
Stringsql="insertinto`零件`values('"+p.getNo()+"'"
+",?"
+",?"
+",?"
+")";
PreparedStatementps=con.prepareStatement(sql);
ps.setString(1,p.getName());
ps.setString(2,p.getColor());
ps.setString(3,p.getBrief());
ps.executeUpdate();
DBConnection.close(null,ps,con);
}catch(SQLExceptione){
e.printStackTrace();
}
}
//修改
publicstaticvoidupdate(Itemp){
try{
Connectioncon=DBConnection.getConnection();
Stringsql="update`零件`set"+
"`零件名`=?"+
",`顏色`=?"+
",`簡介`=?"+
"where`零件編號`='"+p.getNo()+"'";
PreparedStatementps=con.prepareStatement(sql);
ps.setString(1,p.getName());
ps.setString(2,p.getColor());
ps.setString(3,p.getBrief());
ps.executeUpdate();
DBConnection.close(null,ps,con);
}catch(SQLExceptione){
e.printStackTrace();
}
}
//刪除
publicstaticvoiddelete(Stringno){
try{
Connectioncon=DBConnection.getConnection();
Stringsql="deletefrom`零件`where`零件編號`=?";
PreparedStatementps=con.prepareStatement(sql);
ps.setString(1,no);
ps.ex
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版土地買賣居間合同簽訂與履行指導3篇
- 2025年度桶裝純凈水銷售數(shù)據(jù)分析與應用合同
- 二零二五年度醫(yī)院布草用品消毒服務及質(zhì)量監(jiān)控合同3篇
- 二零二五年度商業(yè)場地租賃合同轉(zhuǎn)讓與租賃合同續(xù)簽協(xié)議2篇
- 二手房交易協(xié)議(2024版)
- 2025版事業(yè)單位聘用合同正規(guī)范本(含崗位調(diào)整)3篇
- 2025立醫(yī)院醫(yī)用控溫儀設備采購與安裝服務合同2篇
- 2025年度綠植種子研發(fā)與種植合同3篇
- 二零二五年度農(nóng)用貨車運輸保險代理服務合同
- 二零二五年度土地承包經(jīng)營權(quán)租賃與農(nóng)村電商服務合同
- 山東省青島市2023-2024學年七年級上學期期末考試數(shù)學試題(含答案)
- 墓地銷售計劃及方案設計書
- 從偏差行為到卓越一生3.0版
- 優(yōu)佳學案七年級上冊歷史
- 鋁箔行業(yè)海外分析
- 紀委辦案安全培訓課件
- 超市連鎖行業(yè)招商策劃
- 醫(yī)藥高等數(shù)學智慧樹知到課后章節(jié)答案2023年下浙江中醫(yī)藥大學
- 城市道路智慧路燈項目 投標方案(技術(shù)標)
- 【公司利潤質(zhì)量研究國內(nèi)外文獻綜述3400字】
- 工行全國地區(qū)碼
評論
0/150
提交評論