數(shù)據(jù)庫技術(shù)及應(yīng)用(MySQL)企業(yè)真實(shí)數(shù)據(jù)庫項目1.企業(yè)物資管理數(shù)據(jù)庫_第1頁
數(shù)據(jù)庫技術(shù)及應(yīng)用(MySQL)企業(yè)真實(shí)數(shù)據(jù)庫項目1.企業(yè)物資管理數(shù)據(jù)庫_第2頁
數(shù)據(jù)庫技術(shù)及應(yīng)用(MySQL)企業(yè)真實(shí)數(shù)據(jù)庫項目1.企業(yè)物資管理數(shù)據(jù)庫_第3頁
數(shù)據(jù)庫技術(shù)及應(yīng)用(MySQL)企業(yè)真實(shí)數(shù)據(jù)庫項目1.企業(yè)物資管理數(shù)據(jù)庫_第4頁
數(shù)據(jù)庫技術(shù)及應(yīng)用(MySQL)企業(yè)真實(shí)數(shù)據(jù)庫項目1.企業(yè)物資管理數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

企業(yè)物資管理數(shù)據(jù)庫1.企業(yè)物資管理數(shù)據(jù)庫E-R圖如圖1-2所示。企業(yè)物資管理數(shù)據(jù)庫E-R圖2.創(chuàng)建一個企業(yè)物資管理數(shù)據(jù)庫InventoryManagementDB。CREATEDATABASEInventoryManagementDB;3.查看InventoryManagementDB數(shù)據(jù)庫的創(chuàng)建語句和屬性信息。SHOWCREATEDATABASEInventoryManagementDB;4.創(chuàng)建數(shù)據(jù)表departments,具體如下所示。CREATETABLEdepartments(department_idINT,department_nameVARCHAR(50),contact_phoneVARCHAR(20));5.查看departments表的創(chuàng)建語句。SHOWCREATETABLEdepartments;6.創(chuàng)建一個數(shù)據(jù)表new_departments,其結(jié)構(gòu)與數(shù)據(jù)表departments相同,具體如下。CREATETABLEnew_departmentsLIKEdepartments;7.刪除數(shù)據(jù)表new_departments,具體如下。DROPTABLEnew_departments;--查看new_departments表信息DESCnew_departments;8.在創(chuàng)建倉庫表warehouses時,添加主鍵約束,具體如下。CREATETABLEwarehouses(warehouse_idINTPRIMARYKEY,warehouse_nameVARCHAR(100),warehouse_addressVARCHAR(100));9.創(chuàng)建存放表storages,其字段“倉庫編號”和“庫存編號”為復(fù)合鍵,具體如下。CREATETABLEstorages(warehouse_idINT,product_idVARCHAR(10),stock_quantityINT,storage_locationVARCHAR(100),PRIMARYKEY(warehouse_id,product_id));10.為departments表添加主鍵約束,具體如下。ALTERTABLEdepartmentsADDPRIMARYKEY(department_id);11.刪除存放表storages的主鍵約束,即刪除字段“倉庫編號”和“庫存編號”復(fù)合鍵,具體如下。ALTERTABLEstoragesDROPPRIMARYKEY;12.設(shè)置departments表的department_name(部門名稱)字段為唯一約束,具體如下。ALTERTABLEdepartmentsADDUNIQUE(department_name);13.創(chuàng)建產(chǎn)品表departments,并將department_id字段設(shè)置為主鍵以及自動增長列,具體如下。--創(chuàng)建前先刪除departments表DROPTABLEdepartments;CREATETABLEdepartments(department_idINTPRIMARYKEYAUTO_INCREMENT,department_nameVARCHAR(50),contact_phoneVARCHAR(20));14.設(shè)置departments表的contact_phone字段的值不能為空,具體如下。ALTERTABLEdepartmentsMODIFYcontact_phoneVARCHAR(50)NOTNULL;--查看departments表信息進(jìn)行驗證DESCdepartments;15.例如,為存放表storages的庫存量字段stock_quantity設(shè)置默認(rèn)值0,具體如下。ALTERTABLEstoragesMODIFYstock_quantityINTDEFAULT'0';--查看student表信息進(jìn)行驗證DESCstorages;16.創(chuàng)建員工表employees并添加外鍵約束,具體如下。CREATETABLEemployees(employee_idINTPRIMARYKEY,nameVARCHAR(255)NOTNULL,ageINT,department_idINT,positionVARCHAR(255),leader_idINT,warehouse_idINT,FOREIGNKEY(department_id)REFERENCESdepartments(department_id),FOREIGNKEY(leader_id)REFERENCESemployees(employee_id),FOREIGNKEY(warehouse_id)REFERENCESwarehouses(warehouse_id));17.例如,家庭信息數(shù)據(jù)庫family_db中,存在parent表和children表,其中parent包含2個字段(父編號p_id,父姓名p_name),children表包含3個字段(子編號c_id,子姓名c_name,父編號p_id)。1)首先創(chuàng)建parent表和children表,具體如下。--創(chuàng)建家庭信息數(shù)據(jù)庫family_dbCREATEDATABASEfamily_db;USEfamily_db;--創(chuàng)建parent表CREATETABLEparent(p_idINTAUTO_INCREMENTPRIMARYKEY,--父編號,自增主鍵p_nameVARCHAR(255)NOTNULL--父姓名,不允許為空);--創(chuàng)建children表CREATETABLEchildren(c_idINTAUTO_INCREMENTPRIMARYKEY,--子編號,自增主鍵c_nameVARCHAR(255)NOTNULL,--子姓名,不允許為空p_idINT--父編號);2)為children表添加外鍵約束,具體如下。ALTERTABLEchildrenADDFOREIGNKEY(p_id)REFERENCESparent(p_id);--驗證sco_id字段是否已經(jīng)添加外鍵約束,使用SHOWCREATETABLE語句查看children表SHOWCREATETABLEchildren;18.例如,刪除children表的外鍵約束,具體如下。ALTERTABLEchildrenDROPFOREIGNKEYchildren_ibfk_1;19.例如,將warehouses表的表名修改為new_warehouses。ALTERTABLEwarehousesRENAMEnew_warehouses;--使用SHOWTABLES命令SHOWTABLES;20.例如,將departments表的contact_phone字段修改為level(部門層級)字段。ALTERTABLEdepartmentsCHANGEcontact_phonelevelVARCHAR(50);21.例如,將departments表的level字段的數(shù)據(jù)類型修改為ENUM類型,預(yù)定義列表為“高”“中”“低”,具體如下。ALTERTABLEdepartmentsMODIFYlevelENUM("高","中","低");--驗證數(shù)據(jù)類型是否被修改DESCdepartments;22.例如,向departments表添加新字段remark(備注)字段,具體如下。ALTERTABLEdepartmentsADDremarkVARCHAR(100);--驗證是否添加class_id字段。DESCdepartments;23.例如,將departments表的remark字段刪除,具體如下。ALTERTABLEdepartmentsDROPremark;24.例如,將departments表中department_name字段放到level字段后面的位置,具體如下。ALTERTABLEdepartmentsMODIFYdepartment_nameVARCHAR(50)AFTERlevel;例如,創(chuàng)建一個員工工資表emp_salary_tb,具體如下。CREATETABLEemp_salary_tb(idINTPRIMARYKEY,--員工IDnameVARCHAR(100),--員工姓名positionVARCHAR(100),--員工職位salary_accountint,--工資卡賬戶salary_passwordint,--工資卡密碼salaryDECIMAL(10,2)--工資金額);表中的部分?jǐn)?shù)據(jù)如下。INSERTINTOemp_salary_tbVALUES(1,'凱斯','開發(fā)工程師',2024111,123,60000.00),(2,'鮑勃','經(jīng)理',202411,123,80000.00),(3,'查理','分析師',202411,123,50000.00),(4,'杰克','維修工',202411,123,50000.00);(1)使用UPDATE語句將emp_salary_tb表中salary_password字段的所有值更新為默認(rèn)密碼000000。UPDATEemp_salary_tbSETsalary_password='000000';(2)將鮑勃的職位從經(jīng)理修改為高級經(jīng)理,具體如下。UPDATEemp_salary_tbSETposition='高級經(jīng)理'WHEREname='鮑勃';例如,刪除departments表中的所有數(shù)據(jù),具體如下。DELETEFROMdepartments;例如,刪除emp_salary_tb表中position字段值為分析師的記錄,具體如下DELETEFROMemp_salary_tbWHEREposition='高級經(jīng)理';例如,清空emp_salary_tb表中的數(shù)據(jù),具體如下。TRUNCATETABLEemp_salary_tb;例如,查詢new_warehouses表的全部數(shù)據(jù),具體如下。SELECT*FROMnew_warehouses;例如,查詢new_warehouses表的warehouse_name字段和warehouse_address字段的數(shù)據(jù),具體如下。SELECTwarehouse_name,warehouse_addressFROMnew_warehouses;使用以下的INSERT語句向Sorages表中添加數(shù)據(jù)。INSERTINTOstorages(warehouse_id,product_id,stock_quantity,storage_location)VALUES(101,'P001',100,'A1'),(101,'P002',150,'A2'),(201,'P003',200,'B1'),(201,'P004',180,'B2'),(301,'P005',220,'C1'),(301,'P006',120,'C2'),(401,'P007',170,'D1'),(401,'P008',90,'D2');例如,計算Storages表中庫存數(shù)量(stock_quantity)的總和,具體如下。SELECTSUM(stock_quantity)AStotalFROMstorages;例如,將storages表中的以A開頭庫存位置(storage_location)標(biāo)記為“主要存儲區(qū)”或“次要存儲區(qū)”,并在查詢結(jié)果中顯示新的列,具體如下。SELECTproduct_id,storage_location,IF(storage_locationLIKE'A%','主要存儲區(qū)','次要存儲區(qū)')ASstorage_areaFROMstorages;例如,查詢new_warehouses表中“汽車零件庫”的倉庫地址,具體如下。SELECTwarehouse_name,warehouse_addressFROMnew_warehousesWHEREwarehouse_name='汽車零件庫';例如,查詢Storages表中倉庫編號(warehouse_id)為201且?guī)齑鏀?shù)量(stock_quantity)小于200的產(chǎn)品信息,具體如下。SELECT*FROMstoragesWHEREwarehouse_id=201ANDstock_quantity<200;例如,查詢Storages表中倉庫編號(warehouse_id)為101或者庫存數(shù)量(stock_quantity)大于200的產(chǎn)品信息,具體如下。SELECT*FROMstoragesWHEREwarehouse_id=101ORstock_quantity>200;例如,查詢Storages表中倉庫編號(warehouse_id)不為101的產(chǎn)品信息,具體如下。SELECT*FROMstoragesWHERENOTwarehouse_id=101;例如,查詢Storages表中庫存數(shù)量(stock_quantity)在150-200之間的產(chǎn)品信息,具體如下。SELECT*FROMstoragesWHEREstock_quantityBETWEEN150AND200;例如,查詢Storages表中產(chǎn)品編號(product_id)為P002、P003、P005、P007的產(chǎn)品信息,具體如下。SELECT*FROMstoragesWHEREproduct_idIN('P002','P003','P005','P007');例如,查詢Storages表中庫存數(shù)量(stock_quantity)不為空值的產(chǎn)品信息,具體如下。SELECT*FROMstoragesWHEREstock_quantityISNOTNULL;例如,查詢Storages表中存放位置(storage_location)以C開頭的產(chǎn)品信息,具體如下。SELECT*FROMstoragesWHEREstorage_locationLIKE'C%';例如,查詢各倉庫的總的庫存量,具體如下。SELECTwarehouse_id,SUM(stock_quantity)AStotal_stockFROMstoragesGROUPBYwarehouse_id;例如,查詢庫存總量大于300的倉庫,具體如下。SELECTwarehouse_id,SUM(stock_quantity)AStotal_stockFROMstoragesGROUPBYwarehouse_idHAVINGtotal_stock>300;例如,查詢Storages表中所有數(shù)據(jù),并按照庫存數(shù)量(stock_quantity)降序排序,具體如下。SELECT*FROMstoragesORDERBYstock_quantityDESC;例如,查詢Storages表中,庫存數(shù)量(stock_quantity)大于平均庫存量的產(chǎn)品信息,具體如下。SELECT*FROMStoragesWHEREstock_quantity>(SELECTAVG(stock_quantity)FROMStorages);例如,查詢所有在“器材庫”和“燃料庫”中的產(chǎn)品信息,具體如下。SELECT*FROMstoragesWHEREwarehouse_idIN(SELECTwarehouse_idFROMnew_warehousesWHEREwarehouse_nameIN('器材庫','燃料庫'));例如,查詢庫存量大于100且倉庫地址在21#開頭的倉庫中的產(chǎn)品信息,具體如下。SELECT*FROMstoragessWHEREs.stock_quantity>100ANDEXISTS(SELECT1FROMnew_warehouseswWHEREs.warehouse_id=w.warehouse_idANDw.warehouse_addressLIKE'21#%');為了區(qū)分內(nèi)連接和外連接,在講解示例之前,需要向new_warehouses表中添加一條在storages表中沒有對應(yīng)記錄的記錄,具體如下。INSERTINTOnew_warehouses(warehouse_id,warehouse_name,warehouse_address)VALUES(501,'備用倉庫','25#501');例如,顯式內(nèi)連接查詢所有倉庫及其存儲的產(chǎn)品信息,具體如下。SELECT*FROMnew_warehousesnwINNERJOINstoragessONnw.warehouse_id=s.warehouse_id;例如,使用隱式內(nèi)連接查詢所有倉庫及其存儲的產(chǎn)品信息,具體如下。SELECT*FROMnew_warehousesnw,storagessWHEREnw.warehouse_id=s.warehouse_id;例如,使用自然連接查詢所有倉庫及其存儲的產(chǎn)品信息,具體如下。SELECT*FROMnew_warehousesnwNATURALJOINstoragess;例如,通過new_warehouses、storages和products三個數(shù)據(jù)表的連接,查詢每個倉庫及其存儲的產(chǎn)品和產(chǎn)品的詳細(xì)信息,具體如下。SELECTnw.warehouse_id,nw.warehouse_name,duct_id,duct_name,duct_priceFROMnew_warehousesnwINNERJOINstoragessONnw.warehouse_id=s.warehouse_idINNERJOINproductspONduct_id=duct_id;例如,查詢所有倉庫及其存儲的產(chǎn)品信息,包括產(chǎn)品名稱、庫存量和價格,具體如下。SELECTnw.warehouse_id,nw.warehouse_name,duct_id,duct_name,s.stock_quantity,duct_priceFROMnew_warehousesnw,storagess,productspWHEREnw.warehouse_id=s.warehouse_idANDduct_id=duct_id;例如,使用左外連接查詢所有倉庫及其存儲的產(chǎn)品信息,包括沒有存儲產(chǎn)品的倉庫,具體如下。SELECTnw.warehouse_id,nw.warehouse_name,duct_id,s.stock_quantityFROMnew_warehousesnwLEFTJOINstoragessONnw.warehouse_id=s.warehouse_id;例如,使用右外連接查詢所有產(chǎn)品及其存儲的倉庫信息,包括沒有存儲在任何倉庫中的產(chǎn)品,具體如下。SELECTnw.warehouse_id,nw.warehouse_name,duct_id,s.stock_quantityFROMnew_warehousesnwRIGHTJOINstoragessONnw.warehouse_id=s.warehouse_id;首先,我們創(chuàng)建一個名為union_db的數(shù)據(jù)庫,并在該數(shù)據(jù)庫中創(chuàng)建兩個數(shù)據(jù)表test1_tb和test2_tb具體如下。--創(chuàng)建數(shù)據(jù)庫CREATEDATABASEunion_db;--使用數(shù)據(jù)庫USEunion_db;--創(chuàng)建test1_tb表,并且為id字段添加主鍵約束CREATETABLEtest1_tb(idINTPRIMARYKEY,nameVARCHAR(20));--向test1表中添加數(shù)據(jù)INSERTINTOtest1_tb(id,name)VALUES(1,'紅桃A'),(2,'黑桃2');--創(chuàng)建test2_tb表,并且為id字段添加主鍵約束CREATETABLEtest2_tb(idINTPRIMARYKEY,nameVARCHAR(20));--向test2_tb表中添加數(shù)據(jù)INSERTINTOtest2_tb(id,name)VALUES(1,'紅桃A'),(2,'方塊6');例如,使用UNION操作符查詢test1_tb和test2_tb兩個表中的所有數(shù)據(jù),并去除重復(fù)的記錄,具體如下。SELECTid,nameFROMtest1_tbUNIONSELECTid,nameFROMtest2_tb;例如,使用UNION操作符查詢test1_tb和test2_tb兩個表中的所有數(shù)據(jù),并保留重復(fù)的記錄,具體如下。SELECTid,nameFROMtest1_tbUNIONALLSELECTid,nameFROMtest2_tb;例如,創(chuàng)建一個視圖WarehouseProductDetails來展示每個倉庫中每個產(chǎn)品的詳細(xì)信息,包括產(chǎn)品名稱、存儲位置和庫存量,具體如下。CREATEVIEWWarehouseProductDetailsASSELECTs.warehouse_id,duct_id,duct_name,s.stock_quantity,s.storage_location,duct_priceFROMstoragessJOINproductspONduct_id=duct_id;例如,查詢視圖WarehouseProductDetails中的所有數(shù)據(jù),具體如下。SELECT*FROMWarehouseProductDetails;例如,在視圖WarehouseProductDetails中添加一個新的計算列total_value(表示庫存量乘以產(chǎn)品價格),具體如下。CREATEORREPLACEVIEWWarehouseProductDetailsASSELECTduct_id,duct_name,s.stock_quantity,duct_price,s.stock_quantity*duct_priceAStotal_valueFROMstoragessJOINproductspONduct_id=duct_id;例如,將WarehouseProductDetails視圖中的total_value列定義添加進(jìn)去,也可以使用ALTERVIEW語句,具體如下。ALTERVIEWWarehouseProductDetailsASSELECTduct_id,duct_name,s.stock_quantity,duct_price,s.stock_quantity*duct_priceAStotal_valueFROMstoragessJOINproductspONduct_id=duct_id;例如,為產(chǎn)品表(products)的產(chǎn)品名稱創(chuàng)建普通索引,具體如下。CREATEINDEXidx_product_nameONproducts(product_name);例如,創(chuàng)建products_test表,其字段包含product_id、product_name和product_price,在創(chuàng)建表的同時,為product_name定義唯一索引,具體如下。CREATETABLEproducts_test(product_idVARCHAR(10)PRIMARYKEY,product_nameVARCHAR(255),product_priceDECIMAL(10,2),UNIQUEINDEXidx_product_name(product_name));例如,為倉庫表(new_warehouses)的倉庫名稱創(chuàng)建普通索引,具體如下。ALTERTABLEnew_warehousesADDINDEXidx_warehouse_name(warehouse_name);例如,查看產(chǎn)品表(products)的所有索引信息,具體如下。SHOWINDEXFROMproducts;例如,刪除產(chǎn)品表(products)的idx_product_name索引,具體如下。DROPINDEXidx_product_nameONproducts;例如,聲明一個DECIMAL類型的變量total_sales,并賦值為1000.50,具體如下。DECLARE@total_salesDECIMAL(10,2);SET@total_sales=1000.50;例如,使用CONCAT()函數(shù)拼接字符“山東”和名字“省”,具體如下。SELECTCONCAT('山東','省')ASprovince;例如,使用SUBSTRING()函數(shù)從字符串“數(shù)據(jù)庫管理系統(tǒng)”的第2個字符開始提取3個字符,具體如下。SELECTSUBSTRING('數(shù)據(jù)庫管理系統(tǒng)',2,3)ASsubstring_result;例如,計算字符串“數(shù)據(jù)庫管理系統(tǒng)”的字符數(shù),具體如下。SELECTCHAR_LENGTH('數(shù)據(jù)庫管理系統(tǒng)')ASchar_length;SELECTCHARACTER_LENGTH('數(shù)據(jù)庫管理系統(tǒng)')AScharacter_length;例如,返回-10的絕對值,具體如下。SELECTABS(-10)ASabsolute_value;例如,使用ROUND()函數(shù)獲取7.678和8.21四舍五入后的值,具體如下。SELECTROUND(7.678),ROUND(8.21);例如,返回一個介于0和1之間的隨機(jī)小數(shù),具體如下。SELECTRAND()ASrandom_number;例如,返回當(dāng)前系統(tǒng)日期,具體如下。SELECTCURDATE()ASsystem_current_date;例如,返回當(dāng)前系統(tǒng)時間,具體如下。SELECTCURTIME()ASsystem_current_time;例如,返回當(dāng)前系統(tǒng)日期和時間,具體如下。SELECTNOW()AScurrent_datetime;例如,查詢2024-05-30的基礎(chǔ)上增加10天的日期,具體如下。SELECTDATE_ADD('2024-05-30',INTERVAL10DAY)ASnew_date;例如,DATEDIFF()函數(shù)計算2024-06-30和2024-05-30之間的天數(shù)差,具體如下。SELECTDATEDIFF('2024-06-30','2024-05-30')ASdays_difference;例如,使用WEEK()函數(shù)查詢2024年6月30日是2024年的第幾周,具體如下。SELECTWEEK('2024-6-30');例如,使用DATE_FORMAT()將20240606格式化,按照2024-06-06的格式顯示,具體如下。SELECTDATE_FORMAT(20240606,'%Y-%m-%d');例如,使用VERSION()函數(shù)查詢當(dāng)前數(shù)據(jù)庫的版本號,具體如下。SELECTVERSION();例如,根據(jù)產(chǎn)品的價格判斷產(chǎn)品級別,如果價格大于等于500,則返回“高級”,否則返回“普通”,具體如下。SELECTproduct_name,product_price,IF(product_price>=500,'高級','普通')ASproduct_levelFROMproducts;例如,根據(jù)產(chǎn)品價格判斷產(chǎn)品級別。價格大于等于500時,返回“高級”;價格大于等于300且小于500時,返回“中級”;價格小于300時,返回“普通”,具體如下。SELECTproduct_name,product_price,CASEWHENproduct_price>=500THEN'高級'WHENproduct_price>=300ANDproduct_price<500THEN'中級'ELSE'普通'ENDASproduct_levelFROMproducts;例如,新建一個products2表,其字段為pro_id、pro_name和pro_description。接著為products2添加示例數(shù)據(jù)。最后,查詢products2表數(shù)據(jù),返回結(jié)果中如果product_name或product_description的值為NULL,則使用默認(rèn)值“N/A”,具體如下。--新建一個products2表CREATETABLEproducts2(pro_idINTPRIMARYKEY,pro_nameVARCHAR(255),pro_descriptionVARCHAR(255));--添加示例數(shù)據(jù)INSERTINTOproducts2(pro_id,pro_name,pro_description)VALUES(1,'產(chǎn)品A','這是產(chǎn)品A的描述'),(2,NULL,'這是產(chǎn)品B的描述'),(3,'產(chǎn)品C',NULL),(4,NULL,NULL);--查詢數(shù)據(jù),使用COALESCE()處理NULL值SELECTpro_id,COALESCE(pro_name,'N/A')ASpro_name,COALESCE(pro_description,'N/A')ASpro_descriptionFROMproducts2;例如,創(chuàng)建一個get_product_price函數(shù),用于根據(jù)產(chǎn)品ID返回產(chǎn)品價格,具體如下。--設(shè)置log_bin_trust_function_creators變量為1,可以臨時允許用戶在沒有聲明確定性屬性的情況下創(chuàng)建函數(shù)和存儲過程。SETGLOBALlog_bin_trust_function_creators=1;--創(chuàng)建get_product_price函數(shù),接受一個product_id參數(shù),并返回相應(yīng)的產(chǎn)品價格。DELIMITER$$CREATEFUNCTIONget_product_price(prod_idVARCHAR(10))RETURNSDECIMAL(10,2)BEGINDECLAREpriceDECIMAL(10,2);SELECTproduct_priceINTOpriceFROMproductsWHEREproduct_id=prod_id;RETURNprice;END$$DELIMITER;例如,調(diào)用get_product_price函數(shù),查詢產(chǎn)品編號為“P001”的產(chǎn)品價格,具體如下。SELECTget_product_price('P001')ASproduct_price;例如,刪除自定義函數(shù)get_product_price函數(shù),具體如下DROPFUNCTIONIFEXISTSget_product_price;例如,創(chuàng)建一個存儲過程(GetProductsCount)用于返回產(chǎn)品表中的產(chǎn)品數(shù)量,具體如下。--更改語句結(jié)束符DELIMITER//--創(chuàng)建存儲過程CREATEPROCEDUREGetProductsCount()BEGINSELECTCOUNT(*)ASProductCountFROMproducts;END//--恢復(fù)默認(rèn)語句結(jié)束符DELIMITER;使用CALL語句調(diào)用GetProductsCount存儲過程來獲取產(chǎn)品數(shù)量,具體如下。CALLGetProductsCount();例如,創(chuàng)建存儲過程(GetProductNameById),根據(jù)產(chǎn)品ID查詢產(chǎn)品名稱,具體如下。DELIMITER//CREATEPROCEDUREGetProductNameById(INprod_idVARCHAR(10))BEGINSELECTproduct_nameFROMproductsWHEREproduct_id=prod_id;END//DELIMITER;使用CALL語句調(diào)用GetProductNameById存儲過程來查詢P001的產(chǎn)品名稱,具體如下。CALLGetProductNameById('P001');例如,創(chuàng)建存儲過程(GetProductsCount2),返回產(chǎn)品表中的產(chǎn)品數(shù)量,具體如下。DELIMITER//CREATEPROCEDUREGetProductsCount2(OUTprod_countINT)BEGINSELECTCOUNT(*)INTOprod_countFROMproducts;END//DELIMITER;使用CALL語句調(diào)用GetProductsCount2存儲過程來獲取產(chǎn)品數(shù)量,具體如下。CALLGetProductsCount2(@prod_count);SELECT@prod_count;例如,創(chuàng)建存儲過程(ApplyDiscount),根據(jù)給定的折扣計算并返回折扣后的產(chǎn)品價格,具體如下。DELIMITER//CREATEPROCEDUREApplyDiscount(INOUTprod_priceDECIMAL(10,2),INdiscount_rateDECIMAL(3,2))BEGINSETprod_price=prod_price*discount_rate;END//DELIMITER;使用CALL語句調(diào)用ApplyDiscount存儲過程來獲取8折以后的產(chǎn)品價格,具體如下。SET@price=100.00;CALLApplyDiscount(@price,0.80);SELECT@price;例如,使用SHOWSTATUS語句查看所有名稱以“Get”開頭存儲過程的狀態(tài)。SHOWPROCEDURESTATUSLIKE'Get%'\G例如,查看GetProductsCount存儲過程的創(chuàng)建信息,具體如下。SHOWCREATEPROCEDUREGetProductsCount\G例如,刪除GetProductsCount存儲過程,具體如下。DROPPROCEDUREIFEXISTSGetProductsCount;例如,創(chuàng)建一個存儲過程(LogProductNames),遍歷產(chǎn)品表中的所有產(chǎn)品名稱并插入到一個日志表product_log中。--創(chuàng)建一個日志表product_log用于存儲產(chǎn)品名稱CREATETABLEproduct_log(log_idINTAUTO_INCREMENTPRIMARYKEY,product_nameVARCHAR(255));--創(chuàng)建一個存儲過程LogProductNames使用游標(biāo)遍歷產(chǎn)品表并將每個產(chǎn)品名稱插入到日志表中:DELIMITER//CREATEPROCEDURELogProductNames()BEGIN--聲明變量'done'用于控制循環(huán)退出DECLAREdoneINTDEFAULTFALSE;--聲明變量'productName'用于存儲游標(biāo)提取的產(chǎn)品名稱DECLAREproductNameVARCHAR(255);--聲明游標(biāo)'productCursor'用于選擇products表中的產(chǎn)品名稱DECLAREproductCursorCURSORFORSELECTproduct_nameFROMproducts;--聲明繼續(xù)處理程序,當(dāng)游標(biāo)到達(dá)結(jié)果集的末尾時,設(shè)置'done'為TRUEDECLARECONTINUEHANDLERFORNOTFOUNDSETdone=TRUE;OPENproductCursor;--讀取循環(huán),遍歷游標(biāo)結(jié)果集read_loop:LOOP--從游標(biāo)中提取數(shù)據(jù)到'productName'FETCHproductCursorINTOproductName;--如果游標(biāo)到達(dá)結(jié)果集的末尾,退出循環(huán)IFdoneTHENLEAVEread_loop;ENDIF;--將提取的產(chǎn)品名稱插入到product_log表中INSERTINTOproduct_log(product_name)VALUES(productName);ENDLOOP;CLOSEproductCursor;END//DELIMITER;調(diào)用存儲過程LogProductNames,具體如下CALLLogProductNames();--查看日志表product_log中的記錄SELECT*FROMproduct_log;例如,創(chuàng)建存儲過程ExampleLoop,使用LOOP循環(huán)將1到5之間的數(shù)字插入到numbers表中,具體如下。--創(chuàng)建number表CREATETABLEnumbers(idINTAUTO_INCREMENTPRIMARYKEY,numberINTNOTNULL);--創(chuàng)建存儲過程ExampleLoopDELIMITER//CREATEPROCEDUREExampleLoop()BEGINDECLAREcounterINTDEFAULT1;example_loop:LOOP--在counter大于5時退出循環(huán)。IFcounter>5THENLEAVEexample_loop;ENDIF;INSERTINTOnumbers(number)VALUES(counter);SETcounter=counter+1;ENDLOOPexample_loop;END//DELIMITER;調(diào)用存儲過程ExampleLoop,并查看numbers表的記錄,具體如下。CALLExampleLoop();SELECT*FROMnumbers;例如,創(chuàng)建存儲過程ExampleWhile,WHILE循環(huán)插入1到10之間的數(shù)字到numbers表中,直到counter大于10,具體如下DELIMITER//CREATEPROCEDUREExampleWhile()BEGINDECLAREcounterINTDEFAULT1;WHILEcounter<=10DOINSERTINTOnumbers(number)VALUES(counter);SETcounter=counter+1;ENDWHILE;END//DELIMITER;調(diào)用存儲過程ExampleWhile,具體如下。CALLExampleWhile();SELECT*FROMnumbers;例如,為產(chǎn)品表(products)創(chuàng)建一個插入事件觸發(fā)器(after_product_insert),該觸發(fā)器會在每次插入新產(chǎn)品記錄時,自動將相關(guān)信息插入到日志表(product_log)中,具體如下。DELIMITER//CREATETRIGGERafter_product_insertAFTERINSERTONproductsFOREACHROWBEGININSERTINTOproduct_log(product_name)VALUES(NEW.product_name);END//DELIMITER;接下來,驗證觸發(fā)器的效果。插入新產(chǎn)品記錄,檢查是否觸發(fā)插入事件觸發(fā)器并記錄到日志表中,具體如下。INSERTINTOproducts(product_id,product_name,product_price)VALUES('P009','ProductA',100.50);INSERTINTOproducts(product_id,product_name,product_price)VALUES('P010','ProductB',200.00);SELECT*FROMproduct_log;例如,創(chuàng)建修改事件觸發(fā)器(after_product_update),實(shí)現(xiàn)在產(chǎn)品表(products)中每次更新產(chǎn)品價格時,將舊的價格和新的價格記錄到價格日志表(product_price_log)中,具體如下。--創(chuàng)建價格日志表CREATETABLEproduct_price_log(log_idINTAUTO_INCREMENTPRIMARYKEY,product_idVARCHAR(10)NOTNULL,old_priceDECIMAL(10,2)NOTNULL,new_priceDECIMAL(10,2)NOTNULL,log_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP);--創(chuàng)建修改事件觸發(fā)器DELIMITER//CREATETRIGGERafter_product_updateAFTERUPDATEONproductsFOREACHROWBEGININSERTINTOproduct_price_log(product_id,old_price,new_price)VALUES(OLD.product_id,OLD.product_price,NEW.product_price);END//DELIMITER;接下來,驗證觸發(fā)器的效果。更新產(chǎn)品表中的某條記錄,觸發(fā)器應(yīng)記錄舊價格和新價格到價格日志表中,具體如下。--更新產(chǎn)品價格UPDATEproductsSETproduct_price=150.00WHEREproduct_id='P001';--查看價格日志表內(nèi)容SELECT*FROMproduct_price_log;例如,創(chuàng)建一個刪除事件觸發(fā)器(after_product_delete),實(shí)現(xiàn)在從產(chǎn)品表(products)中刪除產(chǎn)品記錄時,將被刪除的產(chǎn)品信息記錄到刪除日志表(deleted_products_log)中。--創(chuàng)建刪除日志表CREATETABLEdeleted_products_log(log_idINTAUTO_INCREMENTPRIMARYKEY,product_idVARCHAR(10),product_nameVARCHAR(255),product_priceDECIMAL(10,2),log_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP);--創(chuàng)建刪除事件觸發(fā)器DELIMITER//CREATETRIGGERafter_product_deleteAFTERDELETEONproductsFOREACHROWBEGININSERTINTOdeleted_products_log(product_id,product_name,product_price)VALUES(OLD.product_id,OLD.product_name,OLD.product_price);END//DELIMITER;接下來,驗證觸發(fā)器的效果。通過從products表中刪除記錄,并檢查deleted_product_log表中的記錄,驗證觸發(fā)器是否正常工作,具體如下。--刪除產(chǎn)品記錄DELETEFROMproductsWHEREproduct_id='P001';--查看刪除日志表內(nèi)容SELECT*FROMdeleted_products_log;例如,使用SHOWTRIGGERS語句查看當(dāng)前數(shù)據(jù)庫中所有觸發(fā)器,具體如下。SHOWTRIGGERS\G例如,刪除名為after_product_delete的觸發(fā)器,具體如下。DROPTRIGGERIFEXISTSafter_product_delete;通過SHOWVARIABLES語句查看系統(tǒng)變量AUTOCOMMIT值,具體如下。SHOWVARIABLESLIKE'autocommit';例如,將products表中ProductA產(chǎn)品的價格提高10%,并在product_update_log表中記錄此次價格更新操作。確保更新操作和日志記錄操作要么全部成功,要么全部失敗。具體如下。--創(chuàng)建product_update_logCREATETABLEproduct_update_log(log_idINTAUTO_INCREMENTPRIMARYKEY,product_idVARCHAR(10),operationVARCHAR(255),log_timestampTIMESTAMPDEFAULTCURRENT_TIMESTAMP);--開始一個事務(wù)STARTTRANSACTION;--更新產(chǎn)品的價格UPDATEproductsSETproduct_price=product_price*1.1WHEREproduct_name='ProductA';--插入日志記錄INSERTINTOproduct_update_log(product_id,operation)VALUES((SELECTproduct_idFROMproductsWHEREproduct_name='ProductA'),'Updatedpriceby10%');--提交事務(wù)COMMIT;查看products表和product_update_log表中的記錄,驗證事務(wù)是否全部執(zhí)行成功,具體如下。--重新開啟自動提交模式SETAUTOCOMMIT=1;--查看結(jié)果SELECT*FROMproductsWHEREproduct_name='ProductA';SELECT*FROMproduct_update_log;例如,將products表中某個產(chǎn)品的價格更新,并在product_update_log表中記錄此次操作。如果在更新日志時發(fā)生錯誤,則撤銷價格更新操作。具體如下。--關(guān)閉自動提交模式SETAUTOCOMMIT=0;--開始一個事務(wù)STARTTRANSACTION;--更新產(chǎn)品的價格UPDATEproductsSETproduct_price=product_price*1.1WHEREproduct_id='P002';--嘗試插入日志記錄--假設(shè)這里故意插入一個錯誤的SQL語句,產(chǎn)品ID為P000002INSERTINTOproduct_update_log(product_id,operation)VALUES('P000002','Updatedprice');執(zhí)行上述SQL語句后,雖然返回結(jié)果均為“QueryOK”,但此時沒有手動提交事務(wù),使用ROLLBACK語句可以回滾事務(wù)操作,具體如下。ROLLBACK;例如,創(chuàng)建一個名為boss的用戶,密碼為boss123,允許從任何主機(jī)連接,具體如下CREATEUSER'boss'@'%'IDENTIFIEDBY'boss123';CREATEUSER'boss'@'localhost'IDENTIFIEDBY'boss123';例如,授予用戶boss在所有數(shù)據(jù)庫中的SELECT和INSERT權(quán)限,具體如下。GRANTSELECT,INSERTON*.*TO'boss'@'localhost';例如,回收用戶boss在所有數(shù)據(jù)庫中的所有權(quán)限,具體如下。REVOKEALLPRIVILEGESON*.*FROM'boss'@'localhost';例如,將用戶boss改名為new_boss,具體如下。RENAMEUSER'boss'@'localhost'TO'new_boss'@'localhost';例如,列出所有用戶,具體如下。SELECTUser,HostFROMmysql.user;例如,刪除用戶名為boss,且可以從任何主機(jī)(由%指定)連接的用戶boss,具體如下。DROPUSER'boss'@'%';例如,備份inventorymanagementdb數(shù)據(jù)庫,并導(dǎo)出為inventorymanagementdb_bak.sql文件,備份位置為D://mysql_backup文件夾中,具體如下。mysqldump-uroot-pinventorymanagementdb>D://mysql_backup/inventorymanagementdb_bak.sql例如,將D://mysql_backup/inventorymanagementdb_bak.sql文件還原到inventory_db2數(shù)據(jù)庫,具體如下。#Step1:使用mysql命令登錄到MySQL并創(chuàng)建inventory_db2數(shù)據(jù)庫mysql-uroot-p-e"CREATEDATABASEinventory_db2;"#Step2:還原備份文件mysql-uroot-pinventory_db2<D://mysql_backup/inventorymanagementdb_bak.sql還原完成后,可以登錄MySQL并查看inventory_db2數(shù)據(jù)庫中的表和數(shù)據(jù),以確認(rèn)還原是否成功,具體如下。--切換至inventory_db2;USEinventory_db2;--查看所有數(shù)據(jù)表SHOWTABLES;例如,創(chuàng)建表空間TEST2,指定數(shù)據(jù)文件TEST.dbf,大小128M,具體如下。CREATETABLE

溫馨提示

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

評論

0/150

提交評論