黃嶺
(常州紡織服裝職業(yè)技術學院,江蘇常州 213164)
數(shù)據(jù)庫技術課程是高職院校計算機專業(yè)基礎理論課程之一,雖然是基礎理論課程,但它的重要性也是隨著近年網(wǎng)絡大數(shù)據(jù)的發(fā)展變得越來越明顯。各行各業(yè)都離不開數(shù)據(jù)庫,隨著現(xiàn)在數(shù)字產(chǎn)業(yè)化和產(chǎn)業(yè)數(shù)字化發(fā)展,逐漸形成了數(shù)字技術與工業(yè)、農(nóng)業(yè)、服務業(yè)的深度融合,涌現(xiàn)出如互聯(lián)網(wǎng)業(yè)、信息通信業(yè)、電子信息制造業(yè)、軟件服務業(yè)等新興行業(yè)[1]。數(shù)據(jù)庫技術課程所選用的是MySQL 數(shù)據(jù)庫管理系統(tǒng)。MySQL 是一個典型的關系型數(shù)據(jù)庫管理系統(tǒng),也是目前最流行的關系型數(shù)據(jù)庫管理系統(tǒng)之一??梢哉f在Web 應用方面,它是最好的關系數(shù)據(jù)庫管理系統(tǒng)應用軟件。由于MySQL使用的是最常用的SQL標準化語言,加之低成本、小巧靈活、開源的特色,中小型網(wǎng)站大多會首選其作為網(wǎng)站數(shù)據(jù)庫,高職院校計算機專業(yè)選擇其作為數(shù)據(jù)庫技術課程教學也更貼近實際應用。
數(shù)據(jù)庫技術課程應該根據(jù)高等職業(yè)教育知識遵循“必需,夠用”的原則,還應結合高職學生的學習特點,按照認知規(guī)律編排內(nèi)容,由淺入深,詳略得當。針對學生在MySQL 安裝、數(shù)據(jù)庫與表的創(chuàng)建、查詢、索引、視圖、觸發(fā)器、權限、備份恢復這八個教學內(nèi)容學習實踐過程中容易出現(xiàn)的各種問題案例做分析匯總,有利于后續(xù)課程教學的優(yōu)化與設計[2]。
“工欲善其事,必先利其器”,MySQL 數(shù)據(jù)庫的學習過程中,高職學生掌握對此軟件的安裝就顯得十分必要。當然在學習過程中,由于各自計算機軟硬件配置不同,學生也遇到了許多的問題。其實對于初學者,遇到問題并能引導其解決,是可以為他們樹立自信心的[3]。下面列舉MySQL安裝常出現(xiàn)的問題。
1)C++插件安裝提示。在自主安裝MySQL 軟件過程中部分學生遇到如圖1所示的提示窗,這說明當前計算機操作系統(tǒng)里缺少了安裝MySQL 產(chǎn)品和服務所需的插件,圖中顯示缺少“Microsoft Visual C++2013”。由于這是必備插件,單擊“Execute”按鈕,開始安裝需要安裝的組件,進入下一步安裝過程。
圖1 C++插件安裝提示
2)防火墻影響安裝進程。在安裝進行到應用配置階段,部分學生的計算機會出現(xiàn)配置步驟停滯在“Starting Server”,而無法繼續(xù)下去。這個主要是由于殺毒軟件防火墻阻止了程序的運行,可暫時關閉殺毒軟件或安裝過程中允許MySQL安裝進程運行。
3)安裝過程中途退出。部分同學在安裝過程中中斷過安裝,重新運行MySQL安裝程序就出現(xiàn)了如圖所示的情況,然后發(fā)現(xiàn)安裝的MySQL版本被升級或安裝不完整。如果想恢復到以前版本,一般遵循以下步驟完全卸載:
①打開計算機里“控制面板”的“程序與功能”,按照先卸載列表里除“MySQL Installer -Community”之外的其他以“MySQL”開頭的組件,然后再卸載“MySQL Installer -Community”的步驟完成MySQL 應用程序的卸載。
②然后檢查C:下的Program Files文件夾(64位操作系統(tǒng),32位操作系統(tǒng)則為Program Files(x86)文件夾)里面是否還存在“MySQL”文件夾,如果還存在則刪除“MySQL”文件夾。
③然后檢查C:下的ProgramData 文件夾(注意此文件夾默認為隱藏屬性,可去隱藏查看)里面是否還存在“MySQL”文件夾,如果還存在則刪除“MySQL”文件夾。
至此完全卸載了之前安裝的MySQL,如需重新安裝可再次運行MySQL安裝程序。
4)配置環(huán)境變量。MySQL 安裝完畢之后在CMD模式下測試出現(xiàn)如圖2 所示的無法運行MySQL 的情況,這時就需要配置環(huán)境變量。由于mysql.exe等命令位于“C:Program FilesMySQLMySQL Server 5.7in”的目錄下,需要把這個目錄路徑作為“PATH”變量的值添加到如圖3 所示的用戶變量中。然后再重新在CMD 模式下運行MySQL 測試,必要時可加“net start mysql57”命令,就可進入如圖4所示MySQL環(huán)境。
圖2 MySQL測試錯誤
圖3 配置MySQL環(huán)境變量
圖4 CMD模式正常運行MySQL
1)符號及語法錯誤。對于數(shù)據(jù)庫和表的創(chuàng)建,初學者除了語法錯誤之外,還容易用錯標點符號,所有符號都要用英文狀態(tài)下的。經(jīng)常出現(xiàn)如在cmd 模式下用中文狀態(tài)下的“;”,創(chuàng)建表的語句時多參數(shù)之間缺少了分隔符“,”,這些都會引起無法結束語句或出現(xiàn)錯誤提示的情況。另外還要注意在navicate下調(diào)試語句如果只有一條可以省略最后的“;”,但是在cmd模式下行不通。
2)主鍵約束問題。為了能既快速又高效地實現(xiàn)對數(shù)據(jù)庫表中數(shù)據(jù)的更新查找,一般會使用給表中的一個或多個字段添加主鍵約束。當然設置了主鍵的字段要能保證輸入數(shù)據(jù)時不能為空,而且要唯一。另外在數(shù)據(jù)庫中的表之間也可以通過主鍵實現(xiàn)關聯(lián)數(shù)據(jù)完整一致。表中只有一個字段設置為主鍵是最常見的方法,只需在創(chuàng)建表語句該字段的后面,加上“primary key”主鍵標識。當需要用多個字段來唯一標識表中數(shù)據(jù)時,就需要設置復合主鍵了。但復合主鍵不是像圖5 所示的各自字段后面加上“primary key”,應該是如圖6所示在所有字段聲明之后設置。
圖6 正確的復合主鍵添加方法
3)外鍵約束問題。一位同學在創(chuàng)建表(tb_employees2)時,出現(xiàn)如圖7 所示無法添加外鍵約束的錯誤提示。設置外鍵的目的主要是實現(xiàn)表與表之間的數(shù)據(jù)關聯(lián)與統(tǒng)一,外鍵表(設置有外鍵的表)中的外鍵字段的取值一定要來源于主鍵表(取值來源表)中主鍵字段,添加外鍵語法如圖8所示。另外需要注意的是先要創(chuàng)建主鍵表,再創(chuàng)建外鍵表。為了方便今后查詢調(diào)用,外鍵約束的取名也不要重復。經(jīng)過查詢這位同學主鍵表(tb_office)里并沒有id 這個主鍵字段,應改為officeid。
圖7 無法添加外鍵約束
4)默認值約束問題。一位同學在創(chuàng)建表時,出現(xiàn)如圖9 所示無效默認值的錯誤提示。經(jīng)過如圖10 查詢創(chuàng)建數(shù)據(jù)庫語句發(fā)現(xiàn)前期創(chuàng)建數(shù)據(jù)庫時未設置字符集,系統(tǒng)默認使用了latin1字符集,這就會出現(xiàn)無法識別中文的問題,可使用運行語句“alter database 1001HL2 character set utf8;”來解決此問題。
圖10 查詢創(chuàng)建數(shù)據(jù)庫語句
1)Select語法結構順序問題。
一位同學在查詢過程中遇到如圖11 所示的查詢語句錯誤提示。在MySQL 中從數(shù)據(jù)表中查詢數(shù)據(jù)的基本語句是select語句。select語句的語法如下:
圖11 查詢語句錯誤
select 語句主要用到select、from、where、group by、having、order by 這六個關鍵詞,并且他們的書寫順序也是按這六個詞在select 語句語法出現(xiàn)順序,除了select 和from 外,其他關鍵詞可選。這位同學的錯誤就顯而易見了,having和group by的語法順序不對。
2)Select語法問題
Select語法錯誤是多數(shù)學生在這塊練習遇到的問題。例如圖12所示就是某學生使用select 語句時,誤把所選擇的列用小括號括了起來,造成查詢報錯。圖13所示是某學生在select語句中使用sum()函數(shù)時,誤在sum 和()之間加了個空格,造成無法識別函數(shù)而報錯。
圖12 查詢語法錯誤1
圖13 查詢語法錯誤2
索引的創(chuàng)建可以加快表與表之間的連接以及數(shù)據(jù)的檢索速度,如果創(chuàng)建唯一性索引,還可以確保數(shù)據(jù)庫表中字段數(shù)據(jù)保持唯一。其創(chuàng)建方法有兩種,一種是在創(chuàng)建表的同時創(chuàng)建索引,以普通索引為例,代碼如下:
另一種是在已有表上創(chuàng)建索引,以普通索引為例,代碼如下:
create index index_itemId on tb_student_item(itemId);
唯一索引、全文索引、多列索引的創(chuàng)建方法和普通索引類似。這塊內(nèi)容學生容易出現(xiàn)的問題主要集中在多列索引,不少同學會誤把每個字段單獨創(chuàng)建一條索引語句。
1)未知列名錯誤。一位學生在使用視圖做查詢時出現(xiàn)如圖14所示的未知列名的錯誤。通過查詢該視圖的創(chuàng)建語句(如圖15所示)發(fā)現(xiàn),該視圖的字段已用中文別名,那么之后對視圖做操作時引用字段就應使用相應的中文別名。
圖14 未知列名的錯誤
圖15 視圖創(chuàng)建語句
2)視圖修改錯誤。一位同學通過刪除命令來對一個視圖的數(shù)據(jù)進行刪除時出現(xiàn)如圖16所示的錯誤信息。通過查詢該視圖的創(chuàng)建語句(如圖15所示)發(fā)現(xiàn)此視圖為多表關聯(lián)視圖,而多表關聯(lián)視圖是不能通過更改視圖來修改表內(nèi)容的。
圖16 視圖修改錯誤
學生在做一個檢測圖書借閱天數(shù)的觸發(fā)器時,遇到了如圖17所示計算出來的天數(shù)超出數(shù)據(jù)范圍的情況,而測試數(shù)據(jù)‘2022-01-07’到‘2022-03-16’的間隔天數(shù)明顯不大,不應超出數(shù)據(jù)范圍。這個問題主要出在借閱字段的日期型數(shù)據(jù)上,兩個日期型數(shù)據(jù)相減并不能得到天數(shù),需要用如下語句進行轉換才行。@howlong:=(UNIX_TIMESTAMP(new.returnDATE) -UNIX_TIMESTAMP(new.LendDate))/(60*60*24);
圖17 觸發(fā)器超限錯誤
1)用戶權限問題。部分學生在使用新創(chuàng)建的用戶賬號對表做更新操作時出現(xiàn)如圖18所示的權限錯誤提示。經(jīng)檢查是因為之前給創(chuàng)建用戶分配權限之后,未及時使用“FLUSH PRIVILEGES”語句刷新權限所致。
圖18 用戶權限問題
2)用戶賬號問題。部分學生在使用MySQL 語句登錄時出現(xiàn)如圖19所示的用戶錯誤提示。經(jīng)檢查在創(chuàng)建該用戶時取的用戶名是“Test6”,而登錄語句中使用的是“test6”。MySQL 在不同的操作系統(tǒng)下對大小寫的敏感性不同,在Windows下雖然對大部分語句大小寫是不敏感的,但用戶賬號還是區(qū)分大小寫的。語句里使用的用戶名和主機名一定要和創(chuàng)建時設置的嚴格保持一致。
圖19 用戶賬號問題
1)數(shù)據(jù)備份語法。Mysqlpump可以實現(xiàn)數(shù)據(jù)庫轉儲,但它并不是SQL 語句,它是可以在命令行模式下調(diào)用的實用程序,因此要注意它是在命令行中執(zhí)行的,而不是在MySQL里輸入的。主要使用其來完成三類備份:數(shù)據(jù)表的備份、多個數(shù)據(jù)庫的備份、全部數(shù)據(jù)庫的備份,這三類備份具體語句舉例如圖20所示。
圖20 三類備份語句
2)數(shù)據(jù)恢復語法。恢復備份的語句書寫有兩種,一種是進入MySQL數(shù)據(jù)庫恢復備份,命令舉例如下:
mysql>source c:ackup2.sql/*恢復部分數(shù)據(jù)庫*/
還有一種是在cmd命令行模式下恢復備份,命令舉例如下:
C:UsersJASON>mysql -u root -p<c:ackup3.sql/*恢復全部數(shù)據(jù)庫*/
這里要注意如果只是恢復部分數(shù)據(jù)表的話,存放該表的數(shù)據(jù)庫要存在,否則會出現(xiàn)如圖21所示的錯誤信息。
圖21 備份恢復錯誤
高職學生對學習內(nèi)容存在“挑食”的情況,對感興趣或操作類的內(nèi)容學習熱情較高,而對理論性的內(nèi)容普遍提不起精神。即便是感興趣或操作性的內(nèi)容,一旦遇到如前文講到的某些問題案例,很容易停滯不前或放棄。因此對數(shù)據(jù)庫技術課程內(nèi)容的選取,既要考慮到內(nèi)容精簡,又要考慮知識完整性;既要考慮到加強實踐教學,又要考慮適時理論穿插[4]。建議對于數(shù)據(jù)庫和表的創(chuàng)建、查詢操作、索引、視圖、權限這幾部分案例可采用直接指導模式,幫助學生樹立起自信心。對于MySQL 安裝、觸發(fā)器、備份恢復這幾部分案例可采用模擬訓練模式,提供給他們更多可以發(fā)揮的余地[5]。