版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6單元MySQL高級(jí)特性MySQL數(shù)據(jù)庫(kù)應(yīng)用實(shí)戰(zhàn)教程(慕課版)(第2版)目錄【目錄】6.1視圖6.1.1什么是視圖6.1.2創(chuàng)建視圖6.1.3修改視圖6.1.4更新視圖數(shù)據(jù)6.1.5刪除視圖和數(shù)據(jù)6.2游標(biāo)6.2.1游標(biāo)的使用方法6.2.2游標(biāo)的WHILE循環(huán)6.2.3游標(biāo)的REPEAT循環(huán)6.2.4游標(biāo)的LOOP循環(huán)6.3觸發(fā)器6.3.1創(chuàng)建觸發(fā)器6.3.2NEW和OLD關(guān)鍵字6.3.3查看和刪除觸發(fā)器6.3.4INSERT型觸發(fā)器6.3.5UPDATE型觸發(fā)器6.3.6DELETE型觸發(fā)器6.4綜合實(shí)訓(xùn):電商平臺(tái)視圖、游標(biāo)、觸發(fā)器應(yīng)用6.5小結(jié)【學(xué)習(xí)導(dǎo)讀】假設(shè)正在開發(fā)一個(gè)電子商務(wù)網(wǎng)站的訂單管理系統(tǒng)中,需要實(shí)現(xiàn)當(dāng)用戶下單并完成支付時(shí)自動(dòng)生成訂單,并將訂單信息存儲(chǔ)在數(shù)據(jù)庫(kù)中的功能。此時(shí)可以利用MySQL中的視圖、游標(biāo)和觸發(fā)器來(lái)簡(jiǎn)化訂單管理流程。通過(guò)創(chuàng)建訂單視圖,可以方便地查看和檢索訂單信息。使用游標(biāo),可以逐行遍歷訂單數(shù)據(jù),執(zhí)行特定操作。使用觸發(fā)器可以在訂單表發(fā)生變化時(shí)自動(dòng)觸發(fā)相應(yīng)的操作,如更新庫(kù)存、發(fā)送確認(rèn)郵件等。通過(guò)視圖、游標(biāo)和觸發(fā)器的組合應(yīng)用,能夠高效地管理和處理訂單數(shù)據(jù),提升系統(tǒng)的可靠性和效率。學(xué)習(xí)導(dǎo)讀【學(xué)習(xí)目標(biāo)】知識(shí)目標(biāo)1.掌握MySQL視圖的使用方法。2.掌握MySQL游標(biāo)的使用方法。3.掌握MySQL觸發(fā)器的使用方法。能力目標(biāo)1.能夠熟練使用MySQL視圖來(lái)簡(jiǎn)化數(shù)據(jù)查詢。2.能夠熟練使用MySQL游標(biāo)來(lái)查詢數(shù)據(jù)。3.能夠熟練使用MySQL觸發(fā)器在表上執(zhí)行自動(dòng)化操作。素質(zhì)目標(biāo)1.培養(yǎng)創(chuàng)造思維,能夠創(chuàng)造出新的解決方案。2.培養(yǎng)邏輯思維,具備邏輯分析和推理的能力。學(xué)習(xí)目標(biāo)思維導(dǎo)圖6.1視圖MySQL視圖將一張或多張表的查詢結(jié)果集以虛擬表的形式展示給用戶。它提供了一種方便的方式來(lái)簡(jiǎn)化復(fù)雜的查詢操作,并隱藏底層表的結(jié)構(gòu)和數(shù)據(jù)。視圖可以用于簡(jiǎn)化數(shù)據(jù)訪問(wèn)和查詢,并提供數(shù)據(jù)的保護(hù)機(jī)制。視圖是一條SELECT語(yǔ)句返回的結(jié)果集,這個(gè)結(jié)果集可以從一張表中查詢出來(lái),也可以從多張表中查詢出來(lái)。SELECT語(yǔ)句使用的表可以當(dāng)成基本表,而結(jié)果集則構(gòu)成虛擬表。虛擬表也是表,可以進(jìn)行增、刪、改、查操作,但是有條件限制,它可以存放SELECT語(yǔ)句查詢的結(jié)果,但是不存放具體數(shù)據(jù),基本表里的數(shù)據(jù)變化會(huì)影響視圖查詢的結(jié)果。6.1.1什么是視圖6.1視圖使用CREATEVIEW語(yǔ)句創(chuàng)建視圖,指定視圖的名稱和要查詢的列。視圖使用關(guān)鍵字VIEW來(lái)標(biāo)識(shí)。創(chuàng)建視圖的語(yǔ)法格式如下。6.1.2創(chuàng)建視圖CREATE[ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]VIEW視圖名[(屬性清單)]ASSELECT語(yǔ)句
[WITH[CASCADED|LOCAL]CHECKOPTION];CREATEVIEWuser_viewASSELECTid,nameFROMuserWHEREid=1;可選參數(shù)ALGORITHM代表視圖選擇的算法01視圖名類似于表名,查詢視圖時(shí)就要用到視圖名02屬性清單代表視圖中的列名,默認(rèn)其與SELECT語(yǔ)句的查詢結(jié)果中的列名相同,也可以重新自定義列名03可選參數(shù)WITHCHECKOPTION代表更新視圖時(shí)在權(quán)限范圍內(nèi)04可選參數(shù)CASCADED代表更新視圖時(shí)要滿足所有相關(guān)視圖和表的條件05可選參數(shù)LOCAL代表更新視圖時(shí)要滿足視圖本身定義的條件066.1視圖實(shí)戰(zhàn)演練——?jiǎng)?chuàng)建視圖#使用用戶名root和相應(yīng)密碼,連接本地?cái)?shù)據(jù)庫(kù)C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫(kù)shopmysql>USEshopDatabasechanged#創(chuàng)建員工表employeemysql>CREATETABLEemployee(idintnotnullAUTO_INCREMENT,namevarchar(255),sexvarchar(10),ageint,deptIdint,primarykey(id));QueryOK,0rowsaffected(0.34sec)#創(chuàng)建部門表departmentmysql>CREATETABLEdepartment(idintnotnullAUTO_INCREMENT,deptNamevarchar(255),managervarchar(255),primarykey(id));QueryOK,0rowsaffected(0.04sec)6.1視圖#創(chuàng)建工資表payrollmysql>CREATETABLEpayroll(idintnotnullAUTO_INCREMENT,empIdint,salaryvarchar(255),grantDatedate,primarykey(id));QueryOK,0rowsaffected(0.46sec)#批量插入員工數(shù)據(jù)mysql>INSERTINTOemployeeVALUES
(1,'張明','男',30,1),(2,'孫浩','男',25,1),(3,'張靜','女',28,2),(4,'趙穎','女',32,2),(5,'劉帥','男',28,2);QueryOK,5rowsaffected(0.01sec)#批量插入部門數(shù)據(jù)mysql>INSERTINTOdepartmentVALUES(1,'軟件開發(fā)部','王洋'),(2,'人力資源部','吳剛');QueryOK,2rowsaffected(0.01sec)#批量插入工資數(shù)據(jù)mysql>INSERTINTOpayrollVALUES(1,1,'13500','2023-11-15'),(2,1,'16500','2023-12-15'),(3,2,'9500','2023-11-15'),(4,2,'10500','2023-12-15'),(5,3,'11000','2023-11-15'),(6,3,'12000','2023-12-15'),(7,4,'8000','2023-11-15'),(8,4,'8500','2023-12-15'),(9,5,'6000','2023-11-15'),(10,5,'6500','2023-12-15');QueryOK,10rowsaffected(0.01sec)6.1視圖#查看員工表employee的數(shù)據(jù)mysql>SELECT*FROMemployee;+----+-------+------+------+--------+|id|name|sex|age|deptId|+----+-------+------+------+--------+|1|張明|男|30|1||2|孫浩|男|25|1||3|張靜|女|28|2||4|趙穎|女|32|2||5|劉帥|男|28|2|+----+-------+------+------+--------+5rowsinset(0.00sec)#查看部門表department的數(shù)據(jù)mysql>SELECT*FROMdepartment;+----+----------------+---------+|id|deptName|manager|+----+----------------+---------+|1|軟件開發(fā)部|王洋||2|人力資源部|吳剛|+----+----------------+---------+2rowsinset(0.00sec)#查看工資表payroll的數(shù)據(jù)mysql>SELECT*FROMpayroll;+----+-------+--------+------------+|id|empId|salary|grantDate|+----+-------+--------+------------+|1|1|13500|2023-11-15||2|1|16500|2023-12-15||3|2|9500|2023-11-15||4|2|10500|2023-12-15||5|3|11000|2023-11-15||6|3|12000|2023-12-15||7|4|8000|2023-11-15||8|4|8500|2023-12-15||9|5|6000|2023-11-15||10|5|6500|2023-12-15|+----+-------+--------+------------+10rowsinset(0.00sec)6.1視圖#創(chuàng)建視圖edp_view,獲取員工id、員工姓名、部門名稱、工資、發(fā)放日期mysql>CREATEVIEWedp_viewASSELECTe.id,,d.deptName,p.salary,p.grantDateFROMemployeee,departmentd,payrollpWHEREe.deptId=d.idANDe.id=p.empId;QueryOK,0rowsaffected(0.10sec)#查看視圖edp_view的數(shù)據(jù)mysql>SELECT*FROMedp_view;+----+------+------------+--------+------------+|id|name|deptName|salary|grantDate|+----+------+------------+--------+------------+|1|張明|軟件開發(fā)部|13500|2023-11-15||1|張明|軟件開發(fā)部|16500|2023-12-15||2|孫浩|軟件開發(fā)部|9500|2023-11-15||2|孫浩|軟件開發(fā)部|10500|2023-12-15||3|張靜|人力資源部|11000|2023-11-15||3|張靜|人力資源部|12000|2023-12-15||4|趙穎|人力資源部|8000|2023-11-15||4|趙穎|人力資源部|8500|2023-12-15||5|劉帥|人力資源部|6000|2023-11-15||5|劉帥|人力資源部|6500|2023-12-15|+----+------+------------+--------+------------+10rowsinset(0.01sec)6.1視圖#查看視圖edp_view里軟件開發(fā)部的數(shù)據(jù)mysql>SELECT*FROMedp_viewWHEREdeptName='軟件開發(fā)部’;+----+------+------------+--------+------------+|id|name|deptName|salary|grantDate|+----+------+------------+--------+------------+|1|張明|軟件開發(fā)部|13500|2023-11-15||1|張明|軟件開發(fā)部|16500|2023-12-15||2|孫浩|軟件開發(fā)部|9500|2023-11-15||2|孫浩|軟件開發(fā)部|10500|2023-12-15|+----+------+------------+--------+------------+4rowsinset(0.00sec)#查看視圖edp_view里工資超過(guò)10000元的數(shù)據(jù)mysql>SELECT*FROMedp_viewWHEREsalary>10000;+----+------+------------+--------+------------+|id|name|deptName|salary|grantDate|+----+------+------------+--------+------------+|1|張明|軟件開發(fā)部|13500|2023-11-15||1|張明|軟件開發(fā)部|16500|2023-12-15||2|孫浩|軟件開發(fā)部|10500|2023-12-15||3|張靜|人力資源部|11000|2023-11-15||3|張靜|人力資源部|12000|2023-12-15|+----+------+------------+--------+------------+5rowsinset(0.00sec)6.1視圖#查看視圖edp_view的結(jié)構(gòu)mysql>DESCedp_view;+-----------+--------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-----------+--------------+------+-----+---------+-------+|id|int|NO||0|||name|varchar(255)|YES||NULL|||deptName|varchar(255)|YES||NULL|||salary|varchar(255)|YES||NULL|||grantDate|date|YES||NULL||+-----------+--------------+------+-----+---------+-------+5rowsinset(0.01sec)6.1視圖6.1.3修改視圖使用CREATEORREPLACEVIEW語(yǔ)句修改視圖CREATEORREPLACEVIEWview_nameASSELECTcolumn1,column2,...FROMtable_nameWHEREcondition;mysql>CREATEORREPLACEVIEWedp_viewASSELECTe.id,,d.deptName,d.manager,p.salary,p.grantDateFROMemployeee,departmentd,payroll使用ALTER語(yǔ)句修改視圖ALTERVIEWview_nameASSELECTcolumn1,column2,...FROMtable_nameWHEREcondition;mysql>ALTERVIEWedp_viewASSELECTe.id,,e.sex,d.deptName,d.manager,p.salary,p.grantDateFROMemployeee,departmentd,payrollpWHEREe.deptId=d.idANDe.id=p.empId;6.1視圖實(shí)戰(zhàn)演練——修改視圖#使用用戶名root和相應(yīng)密碼,連接本地?cái)?shù)據(jù)庫(kù)C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫(kù)shopmysql>USEshopDatabasechanged#使用CREATEORREPLACEVIEW語(yǔ)句修改視圖mysql>CREATEORREPLACEVIEWedp_viewASSELECTe.id,,d.deptName,d.manager,p.salary,p.grantDateFROMemployeee,departmentd,payrollpWHEREe.deptId=d.idANDe.id=p.empId;QueryOK,0rowsaffected(0.09sec)#查看視圖edp_view的結(jié)構(gòu)mysql>DESCedp_view;+-----------+--------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-----------+--------------+------+-----+---------+-------+|id|int|NO||0|||name|varchar(255)|YES||NULL|||deptName|varchar(255)|YES||NULL|||manager|varchar(255)|YES||NULL|||salary|varchar(255)|YES||NULL|||grantDate|date|YES||NULL||+-----------+--------------+------+-----+---------+-------+6rowsinset(0.00sec)6.1視圖#查詢視圖edp_view的數(shù)據(jù)mysql>SELECT*FROMedp_view;+----+------+------------+---------+--------+------------+|id|name|deptName|manager|salary|grantDate|+----+------+------------+---------+--------+------------+|1|張明|軟件開發(fā)部|王洋|13500|2023-11-15||1|張明|軟件開發(fā)部|王洋|16500|2023-12-15||2|孫浩|軟件開發(fā)部|王洋|9500|2023-11-15||2|孫浩|軟件開發(fā)部|王洋|10500|2023-12-15||3|張靜|人力資源部|吳剛|11000|2023-11-15||3|張靜|人力資源部|吳剛|12000|2023-12-15||4|趙穎|人力資源部|吳剛|8000|2023-11-15||4|趙穎|人力資源部|吳剛|8500|2023-12-15||5|劉帥|人力資源部|吳剛|6000|2023-11-15||5|劉帥|人力資源部|吳剛|6500|2023-12-15|+----+------+------------+---------+--------+------------+10rowsinset(0.00sec)6.1視圖#使用ALTER語(yǔ)句修改視圖mysql>ALTERVIEWedp_viewASSELECTe.id,,e.sex,d.deptName,d.manager,p.salary,p.grantDateFROMemployeee,departmentd,payrollpWHEREe.deptId=d.idANDe.id=p.empId;QueryOK,0rowsaffected(0.11sec)#查看視圖edp_view的結(jié)構(gòu)mysql>DESCedp_view;+-----------+--------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-----------+--------------+------+-----+---------+-------+|id|int|NO||0|||name|varchar(255)|YES||NULL|||sex|varchar(10)|YES||NULL|||deptName|varchar(255)|YES||NULL|||manager|varchar(255)|YES||NULL|||salary|varchar(255)|YES||NULL|||grantDate|date|YES||NULL||+-----------+--------------+------+-----+---------+-------+7rowsinset(0.00sec)6.1視圖#查詢視圖edp_view的數(shù)據(jù)mysql>SELECT*FROMedp_view;+----+------+------+------------+---------+--------+------------+|id|name|sex|deptName|manager|salary|grantDate|+----+------+------+------------+---------+--------+------------+|1|張明|男|軟件開發(fā)部|王洋|13500|2023-11-15||1|張明|男|軟件開發(fā)部|王洋|16500|2023-12-15||2|孫浩|男|軟件開發(fā)部|王洋|9500|2023-11-15||2|孫浩|男|軟件開發(fā)部|王洋|10500|2023-12-15||3|張靜|女|人力資源部|吳剛|11000|2023-11-15||3|張靜|女|人力資源部|吳剛|12000|2023-12-15||4|趙穎|女|人力資源部|吳剛|8000|2023-11-15||4|趙穎|女|人力資源部|吳剛|8500|2023-12-15||5|劉帥|男|人力資源部|吳剛|6000|2023-11-15||5|劉帥|男|人力資源部|吳剛|6500|2023-12-15|+----+------+------+------------+---------+--------+------------+10rowsinset(0.00sec)mysql>6.1視圖6.1.4更新視圖數(shù)據(jù)實(shí)戰(zhàn)演練——修改視圖#使用用戶名root和相應(yīng)密碼,連接本地?cái)?shù)據(jù)庫(kù)C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫(kù)shopmysql>USEshopDatabasechanged#查詢視圖edp_view的數(shù)據(jù)mysql>SELECT*FROMedp_view;+----+------+------+------------+---------+--------+------------+|id|name|sex|deptName|manager|salary|grantDate|+----+------+------+------------+---------+--------+------------+|1|張明|男|軟件開發(fā)部|王洋|13500|2023-11-15||1|張明|男|軟件開發(fā)部|王洋|16500|2023-12-15||2|孫浩|男|軟件開發(fā)部|王洋|9500|2023-11-15||2|孫浩|男|軟件開發(fā)部|王洋|10500|2023-12-15||3|張靜|女|人力資源部|吳剛|11000|2023-11-15||3|張靜|女|人力資源部|吳剛|12000|2023-12-15||4|趙穎|女|人力資源部|吳剛|8000|2023-11-15||4|趙穎|女|人力資源部|吳剛|8500|2023-12-15||5|劉帥|男|人力資源部|吳剛|6000|2023-11-15||5|劉帥|男|人力資源部|吳剛|6500|2023-12-15|+----+------+------+------------+---------+--------+------------+10rowsinset(0.00sec)6.1視圖#更新視圖edp_view里部門名稱為軟件開發(fā)部的部門經(jīng)理為李姝mysql>UPDATEedp_viewSETmanager='李姝'WHEREdeptName='軟件開發(fā)部';QueryOK,1rowaffected(0.06sec)Rowsmatched:1Changed:1Warnings:0#更新視圖數(shù)據(jù)成功,將軟件開發(fā)部的部門經(jīng)理改為李姝mysql>SELECT*FROMedp_view;+----+------+------+------------+---------+--------+------------+|id|name|sex|deptName|manager|salary|grantDate|+----+------+------+------------+---------+--------+------------+|1|張明|男|軟件開發(fā)部|李姝|13500|2023-11-15||1|張明|男|軟件開發(fā)部|李姝|16500|2023-12-15||2|孫浩|男|軟件開發(fā)部|李姝|9500|2023-11-15||2|孫浩|男|軟件開發(fā)部|李姝|10500|2023-12-15||3|張靜|女|人力資源部|吳剛|11000|2023-11-15||3|張靜|女|人力資源部|吳剛|12000|2023-12-15||4|趙穎|女|人力資源部|吳剛|8000|2023-11-15||4|趙穎|女|人力資源部|吳剛|8500|2023-12-15||5|劉帥|男|人力資源部|吳剛|6000|2023-11-15||5|劉帥|男|人力資源部|吳剛|6500|2023-12-15|+----+------+------+------------+---------+--------+------------+10rowsinset(0.00sec)6.1視圖#將部門表department里軟件開發(fā)部的部門經(jīng)理也改為李姝,聯(lián)動(dòng)視圖的修改,對(duì)基本表也進(jìn)行修改mysql>SELECT*FROMdepartment;+----+------------+---------+|id|deptName|manager|+----+------------+---------+|1|軟件開發(fā)部|李姝||2|人力資源部|吳剛|+----+------------+---------+2rowsinset(0.00sec)#與多表關(guān)聯(lián)的視圖edp_view,插入數(shù)據(jù)會(huì)失敗mysql>INSERTINTOedp_viewVALUES(6,'王鑫','男','辦公室','王宇','7000','2023-12-15');ERROR1394(HY000):Cannotinsertintojoinview'shop.edp_view'withoutfieldslist#與多表關(guān)聯(lián)的視圖edp_view,刪除數(shù)據(jù)會(huì)失敗mysql>DELETEedp_viewWHEREid=1;ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'WHEREid=1'atline1#創(chuàng)建基于單表的視圖emp_view,包含員工id、員工姓名mysql>CREATEVIEWemp_viewASSELECTid,nameFROMemployee;QueryOK,0rowsaffected(0.12sec)6.1視圖#查看視圖emp_view的結(jié)構(gòu)mysql>DESCemp_view;+-------+--------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+--------------+------+-----+---------+-------+|id|int|NO||0|||name|varchar(255)|YES||NULL||+-------+--------------+------+-----+---------+-------+2rowsinset(0.00sec)#查詢視圖emp_view的數(shù)據(jù)mysql>SELECT*FROMemp_view;+----+--------+|id|name|+----+--------+|1|張明||2|孫浩||3|張靜||4|趙穎||5|劉帥|+----+--------+5rowsinset(0.00sec)6.1視圖#查詢員工表employee的數(shù)據(jù)mysql>SELECT*FROMemployee;+----+------+------+------+--------+|id|name|sex|age|deptId|+----+------+------+------+--------+|1|張明|男|30|1||2|孫浩|男|25|1||3|張靜|女|28|2||4|趙穎|女|32|2||5|劉帥|男|28|2|+----+------+------+------+--------+5rowsinset(0.00sec)#在視圖emp_view中插入數(shù)據(jù),插入數(shù)據(jù)成功mysql>INSERTINTOemp_viewVALUES(6,'劉濤');QueryOK,1rowaffected(0.00sec)#查詢視圖emp_view的數(shù)據(jù),可以看到插入成功mysql>SELECT*FROMemp_view;+----+-------+|id|name|+----+-------+|1|張明||2|孫浩||3|張靜||4|趙穎||5|劉帥||6|劉濤|+----+-------+6rowsinset(0.00sec)6.1視圖#查詢員工表employee的數(shù)據(jù)mysql>SELECT*FROMemployee;+----+------+------+------+--------+|id|name|sex|age|deptId|+----+------+------+------+--------+|1|張明|男|30|1||2|孫浩|男|25|1||3|張靜|女|28|2||4|趙穎|女|32|2||5|劉帥|男|28|2||6|劉濤|NULL|NULL|NULL|+----+------+------+------+--------+6rowsinset(0.00sec)#刪除視圖emp_view中id為3的數(shù)據(jù),刪除數(shù)據(jù)成功mysql>DELETEFROMemp_viewWHEREid=3;QueryOK,1rowaffected(0.00sec)#查詢視圖emp_view的數(shù)據(jù)mysql>SELECT*FROMemp_view;+----+--------+|id|name|+----+--------+|1|張明||2|孫浩||4|趙穎||5|劉帥||6|劉濤|+----+--------+5rowsinset(0.00sec)#查詢員工表employee的數(shù)據(jù)mysql>SELECT*FROMemployee;+----+-------+------+------+--------+|id|name|sex|age|deptId|+----+-------+------+------+--------+|1|張明|男|30|1||2|孫浩|男|25|1||4|趙穎|女|32|2||5|劉帥|男|28|2||6|劉濤|NULL|NULL|NULL|+----+-------+------+------+--------+5rowsinset(0.00sec)mysql>6.1視圖6.1.5刪除視圖和數(shù)據(jù)刪除視圖就像刪除表一樣簡(jiǎn)單。刪除視圖的數(shù)據(jù)要注意兩點(diǎn):如果視圖是依賴于單個(gè)基本表建立的,則可以直接刪除數(shù)據(jù);如果視圖是依賴于多個(gè)基本表建立的,則不允許直接刪除數(shù)據(jù)。刪除視圖DROPVIEWIFEXISTSview_name;DROPVIEWview_name;刪除視圖的數(shù)據(jù)DELETEFROMview_name;6.1視圖實(shí)戰(zhàn)演練——?jiǎng)h除視圖和數(shù)據(jù)#使用用戶名root和相應(yīng)密碼,連接本地?cái)?shù)據(jù)庫(kù)C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫(kù)shopmysql>USEshopDatabasechanged#查看依賴于單個(gè)基本表建立的視圖emp_view的數(shù)據(jù)mysql>SELECT*FROMemp_view;+----+-------+|id|name|+----+-------+|1|張明||2|孫浩||4|趙穎||5|劉帥||6|劉濤|+----+-------+5rowsinset(0.00sec)6.1視圖#依賴于單個(gè)基本表建立的視圖的數(shù)據(jù)允許直接刪除mysql>DELETEFROMemp_viewWHEREid=5;QueryOK,1rowaffected(0.00sec)#查詢視圖emp_view的數(shù)據(jù)mysql>SELECT*FROMemp_view;+----+-------+|id|name|+----+-------+|1|張明||2|孫浩||4|趙穎||6|劉濤|+----+-------+4rowsinset(0.00sec)#查詢基本表employee的數(shù)據(jù)mysql>SELECT*FROMemployee;+----+-------+------+------+--------+|id|name|sex|age|deptId|+----+-------+------+------+--------+|1|張明|男|30|1||2|孫浩|男|25|1||4|趙穎|女|32|2||6|劉濤|NULL|NULL|NULL|+----+-------+------+------+--------+4rowsinset(0.00sec)#如果視圖存在,刪除視圖emp_viewmysql>DROPVIEWIFEXISTSemp_view;QueryOK,0rowsaffected(0.00sec)6.1視圖#查看依賴于多個(gè)基本表建立的視圖edp_view的數(shù)據(jù)mysql>SELECT*FROMedp_view;+----+-------+------+---------------+---------+--------+-----------+|id|name|sex|deptName|manager|salary|grantDate|+----+-------+------+---------------+---------+--------+-----------+|1|張明|男|軟件開發(fā)部|李姝|13500|2023-11-15||1|張明|男|軟件開發(fā)部|李姝|16500|2023-12-15||2|孫浩|男|軟件開發(fā)部|李姝|9500|2023-11-15||2|孫浩|男|軟件開發(fā)部|李姝|10500|2023-12-15||4|趙穎|女|人力資源部|吳剛|8000|2023-11-15||4|趙穎|女|人力資源部|吳剛|8500|2023-12-15|+----+-------+------+---------------+---------+--------+-----------+6rowsinset(0.00sec)#依賴于多個(gè)基本表建立的視圖的數(shù)據(jù)是不能直接刪除的mysql>DELETEFROMedp_viewWHEREid=1;ERROR1395(HY000):Cannotdeletefromjoinview'shop.edp_view’#刪除視圖edp_viewmysql>DROPVIEWedp_view;QueryOK,0rowsaffected(0.00sec)mysql>6.2游標(biāo)6.2.1游標(biāo)的使用方法游標(biāo)是一個(gè)存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)里用來(lái)查詢的對(duì)象,它可以每次從結(jié)果集里獲取一行數(shù)據(jù),以進(jìn)行相應(yīng)的處理。有了游標(biāo),就可以滾動(dòng)查詢滿足條件的數(shù)據(jù),可以做一些復(fù)雜的處理。MySQL游標(biāo)只能用于存儲(chǔ)過(guò)程或者函數(shù)中。創(chuàng)建游標(biāo)DECLAREcursor_nameCURSORFORselectSqlmysql>DELIMITER$$mysql>CREATEPROCEDUREp1()#創(chuàng)建存儲(chǔ)過(guò)程
BEGINDECLAREc_namevarchar(20);#聲明變量c_name,用來(lái)存放SQL語(yǔ)句查詢出來(lái)的姓名nameDECLAREcursor1CURSOR#定義游標(biāo)cursor1FORSELECTnameFROMemployee;#使用SQL語(yǔ)句查詢姓名nameOPENcursor1;#打開游標(biāo)
FETCHcursor1INTOc_name;#使用游標(biāo),將游標(biāo)查詢出來(lái)的姓名name賦值給c_nameSELECTc_name;#顯示結(jié)果
CLOSEcursor1;#關(guān)閉游標(biāo)
END$$6.2游標(biāo)打開游標(biāo)。游標(biāo)在使用前需要打開,使用OPENCURSOR語(yǔ)句來(lái)打開游標(biāo)。OPENcursor1;使用游標(biāo)。游標(biāo)被打開后,可以使用FETCH語(yǔ)句訪問(wèn)SQL語(yǔ)句查詢出來(lái)的結(jié)果集中的每一行數(shù)據(jù)。它是按順序進(jìn)行讀取的,不重復(fù)讀取,執(zhí)行FETCH語(yǔ)句一次,讀取一行數(shù)據(jù)。FETCHcursor1INTOc_name關(guān)閉游標(biāo)。游標(biāo)處理完成后需要關(guān)閉,使用CLOSECURSOR語(yǔ)句來(lái)關(guān)閉游標(biāo)。CLOSEcursor1;6.2游標(biāo)6.2.2游標(biāo)的WHILE循環(huán)在有多行數(shù)據(jù)滿足條件時(shí),需要逐行獲取數(shù)據(jù)。而使用FETCH語(yǔ)句每次只能獲取一行數(shù)據(jù),如果想獲取多行數(shù)據(jù),就需要將FETCH語(yǔ)句執(zhí)行多次。在游標(biāo)里使用循環(huán)語(yǔ)句就不需要多次執(zhí)行FETCH語(yǔ)句。WHILE循環(huán)的語(yǔ)法格式如下。WHILE……DO……ENDWHILEWHILE(n>0)DOSELECTn;SETn=n-1;ENDWHILE;6.2游標(biāo)6.2.3游標(biāo)的REPEAT循環(huán)游標(biāo)的循環(huán)除了WHILE循環(huán),也可以是REPEAT循環(huán)。REPEAT循環(huán)的語(yǔ)法格式如下。REPEAT……UNTILENDREPEATREPEATSELECTn;SETn=n-1;UNTILn<0ENDREPEAT實(shí)戰(zhàn)演練——REPEAT循環(huán)的游標(biāo)#使用用戶名root和相應(yīng)密碼,連接本地?cái)?shù)據(jù)庫(kù)C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫(kù)shopmysql>USEshopDatabasechanged#查詢員工表employee_infomysql>SELECT*FROMemployee_info;+----+--------+--------+|id|name|salary|+----+--------+--------+|1|小明|3700||2|小紅|5700||3|小藍(lán)|7800|+----+--------+--------+3rowsinset(0.00sec)6.2游標(biāo)#修改結(jié)束符$$mysql>DELIMITER$$#定義存儲(chǔ)過(guò)程p4(),定義游標(biāo)cursor4,使用REPEAT循環(huán)mysql>CREATEPROCEDUREp4()BEGINDECLAREc_idint;DECLAREc_namevarchar(20);DECLAREc_salaryint;DECLAREflagintdefault0;DECLAREcursor4CURSORFORSELECTid,name,salaryFROMemployee_info;DECLAREEXITHANDLERFORNOTFOUNDSETflag=1;OPENcursor4;REPEATFETCHcursor4INTOc_id,c_name,c_salary;SELECTc_id,c_name,c_salary;UNTILflag=1ENDREPEAT;CLOSEcursor4;END$$QueryOK,0rowsaffected(0.00sec)#修改結(jié)束符mysql>DELIMITER;#調(diào)用存儲(chǔ)過(guò)程p4(),循環(huán)輸出結(jié)果mysql>CALLp4();+------+--------+----------+|c_id|c_name|c_salary|+------+--------+----------+|1|小明|3700|+------+--------+----------+1rowinset(0.00sec)+------+--------+----------+|c_id|c_name|c_salary|+------+--------+----------+|2|小紅|5700|+------+--------+----------+1rowinset(0.01sec)+------+--------+----------+|c_id|c_name|c_salary|+------+--------+----------+|3|小藍(lán)|7800|+------+--------+----------+1rowinset(0.04sec)QueryOK,0rowsaffected(0.05sec)mysql>6.2游標(biāo)6.2.4游標(biāo)的LOOP循環(huán)游標(biāo)的循環(huán)除了WHILE、REPEAT循環(huán),也可以是LOOP循環(huán)。LOOP循環(huán)的語(yǔ)法格式如下。LOOP……ENDLOOPDECLAREiintdefault1;lp1:LOOPSETi=i+1;IFi>30THENLEAVElp1;#離開循環(huán)體ENDIF;ENDLOOP實(shí)戰(zhàn)演練——LOOP循環(huán)的游標(biāo)#使用用戶名root和相應(yīng)密碼,連接本地?cái)?shù)據(jù)庫(kù)C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫(kù)shopmysql>USEshopDatabasechanged#查看員工表employee_info的數(shù)據(jù)mysql>SELECT*FROMemployee_info;+----+--------+--------+|id|name|salary|+----+--------+--------+|1|小明|3700||2|小紅|5700||3|小藍(lán)|7800|+----+--------+--------+3rowsinset(0.00sec)6.2游標(biāo)#修改結(jié)束符$$mysql>DELIMITER$$#創(chuàng)建存儲(chǔ)過(guò)程p5(),定義游標(biāo)cursor5,使用LOOP循環(huán)mysql>CREATEPROCEDUREp5()BEGINDECLAREc_idint;DECLAREc_namevarchar(20);DECLAREc_salaryint;DECLAREflagintdefault0;DECLAREcursor5CURSORFORSELECTid,name,salaryFROMemployee_info;DECLAREEXITHANDLERFORNOTFOUNDSETflag=1;OPENcursor5;loop_label:LOOP#循環(huán)開始
FETCHcursor5INTOc_id,c_name,c_salary;SELECTc_id,c_name,c_salary;IF(flag=1)THENLEAVEloop_label;#終止循環(huán)
ENDIF;ENDLOOP;CLOSEcursor5;END$$QueryOK,0rowsaffected(0.00sec)#修改結(jié)束符mysql>DELIMITER;#調(diào)用存儲(chǔ)過(guò)程p5()mysql>CALLp5();+------+--------+----------+|c_id|c_name|c_salary|+------+--------+----------+|1|小明|3700|+------+--------+----------+1rowinset(0.00sec)+------+--------+----------+|c_id|c_name|c_salary|+------+--------+----------+|2|小紅|5700|+------+--------+----------+1rowinset(0.02sec)+------+--------+----------+|c_id|c_name|c_salary|+------+--------+----------+|3|小藍(lán)|7800|+------+--------+----------+1rowinset(0.04sec)QueryOK6.3觸發(fā)器6.3.1創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器和創(chuàng)建存儲(chǔ)過(guò)程類似,其基本語(yǔ)法格式如下。CREATE[DEFINER={user|CURRENT_USER}]TRIGGERtrigger_nametrigger_timetrigger_eventONtbl_nameFOREACHROWtrigger_bodyCREATETRIGGERadd_dataAFTERINSERTONt1FOREACHROWBEGININSERTINTOt2VALUES('你好');ENDTRIGGER是觸發(fā)器的關(guān)鍵字,用來(lái)標(biāo)識(shí)觸發(fā)器。trigger_name:觸發(fā)器的名稱,不能與已有觸發(fā)器的名稱重復(fù)。trigger_time:觸發(fā)器觸發(fā)的時(shí)機(jī),只有兩個(gè)值,即BEFORE和AFTER。trigger_event:觸發(fā)器觸發(fā)的事件,只有3個(gè)值,即INSERT、UPDATE、DELETE。tbl_name:創(chuàng)建觸發(fā)器的表名,就是在哪張表添加觸發(fā)器。FOREACHROW:在表的每一行操作。trigger_body:觸發(fā)器程序體,可以是一條SQL語(yǔ)句,或者用BEGIN和END包含的多條語(yǔ)句。根據(jù)觸發(fā)的時(shí)機(jī)和事件,可以創(chuàng)建6種類型的觸發(fā)器:插入之前(BEFOREINSERT)觸發(fā)器、更新之前(BEFOREUPDATE)觸發(fā)器、刪除之前(BEFOREDELETE)觸發(fā)器、插入之后(AFTERINSERT)觸發(fā)器、更新之后(AFTERUPDATE)觸發(fā)器、刪除之后(AFTERDELETE)觸發(fā)器。一張表上不能同時(shí)創(chuàng)建兩個(gè)類型相同的觸發(fā)器,如創(chuàng)建一個(gè)插入之前觸發(fā)器后,再創(chuàng)建一個(gè)插入之前觸發(fā)器是不允許的。6.3觸發(fā)器實(shí)戰(zhàn)演練——?jiǎng)?chuàng)建觸發(fā)器#使用用戶名root和相應(yīng)密碼,連接本地?cái)?shù)據(jù)庫(kù)C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecan
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年杭州豐潭中學(xué)提前批筆試及答案
- 2025年拓殖大學(xué)經(jīng)營(yíng)學(xué)筆試題目及答案
- 2025年西農(nóng)農(nóng)管復(fù)試筆試及答案
- 2025年國(guó)考新疆歷年筆試及答案
- 2025年牛客網(wǎng)后端筆試題庫(kù)及答案
- 2025年人社部直屬事業(yè)單位考試及答案
- 2025年西安市市屬事業(yè)單位考試及答案
- 落實(shí)信息工作相關(guān)制度
- 綠城管理的五大制度
- VMware替代詳解方案及最佳實(shí)踐(企業(yè)云平臺(tái)篇)
- DB4114T 105-2019 黃河故道地區(qū)蘋果化學(xué)疏花疏果技術(shù)規(guī)程
- 如何高效向GPT提問(wèn)
- JT-T-969-2015路面裂縫貼縫膠
- 無(wú)抗養(yǎng)殖模式可行性分析
- 《常見(jiàn)疾病康復(fù)》課程教學(xué)大綱
- 飼料廠HACCP計(jì)劃書
- PIPESIM軟件教程(軟件介紹及模型建立)
- xx大廈舊溴化鋰制冷機(jī)中央空調(diào)拆除施工方案
- “十佳和諧社區(qū)”創(chuàng)建先進(jìn)事跡材料
- 單層工業(yè)廠房標(biāo)底
- YY/T 0708-2009醫(yī)用電氣設(shè)備第1-4部分:安全通用要求并列標(biāo)準(zhǔn):可編程醫(yī)用電氣系統(tǒng)
評(píng)論
0/150
提交評(píng)論