王彩霞,王睿
摘要:近年來,各大職業(yè)技術(shù)院校計(jì)算機(jī)相關(guān)專業(yè)《數(shù)據(jù)庫技術(shù)》課程,授課計(jì)劃從原來的“SQL Server”換成了“MySQL”,主要是因?yàn)镸ySQL數(shù)據(jù)庫已是當(dāng)下許多公司采用的數(shù)據(jù)庫系統(tǒng),MySQL數(shù)據(jù)庫系統(tǒng)占空間很小,安裝簡單,卸載方便,兼容不同的操作系統(tǒng),代碼開源,也不存在盜版問題,還能配合Navicat進(jìn)行可視化操作,這也方便了教學(xué)的開展,比SQL Server使用更方便,更有效提高開發(fā)效率,與SQL Server相比,兩者在很多方面有相同點(diǎn),也有差異,該文主要針對兩者在數(shù)據(jù)完整性約束上的異同進(jìn)行研究和闡述,重點(diǎn)討論了用戶定義的五種完整性約束的異同。
關(guān)鍵詞:MySQL;SQL Server;Navicat;數(shù)據(jù)庫
中圖分類號:G642? ? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)21-0026-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
數(shù)據(jù)完整性是數(shù)據(jù)庫設(shè)計(jì)好壞的一項(xiàng)重要標(biāo)志,它是為了保證數(shù)據(jù)庫中數(shù)據(jù)的一致性和準(zhǔn)確性,讓不符合規(guī)范的數(shù)據(jù)不能寫入數(shù)據(jù)庫,特別是插入、修改、刪除數(shù)據(jù)時(shí),數(shù)據(jù)庫管理系統(tǒng)軟件(以MySQL為例)會提供一種自動(dòng)保證數(shù)據(jù)完整性的方法,即約束,來保證數(shù)據(jù)庫中數(shù)據(jù)是合理的、正確的、有效的。
1 數(shù)據(jù)完整性約束的簡介
數(shù)據(jù)完整性約束可分成下面五種:
(1)主鍵約束:主鍵是指一個(gè)列或多個(gè)列的組合,其值能唯一標(biāo)識表中的每一行,通過它可以保證表的實(shí)體完整性。
(2)外鍵約束:可以保證數(shù)據(jù)庫中兩表的數(shù)據(jù)鏈接,通過主關(guān)鍵字和外關(guān)鍵字來實(shí)現(xiàn),保證數(shù)據(jù)庫中兩表數(shù)據(jù)的一致性。第一個(gè)表中的一列或多列必須是主鍵或組合主鍵,將該字段添加到第二個(gè)表中,這個(gè)列就是第二個(gè)表的外鍵。
(3)唯一約束:又被稱為UNIQUE約束,標(biāo)識數(shù)據(jù)庫表中的每條記錄不能重復(fù),即唯一性,但是可以允許為空值,但只能有一行值為NULL。
(4)檢查約束:又被稱為:“CHECK約束”,用于限定數(shù)據(jù)庫中每列數(shù)據(jù)的取值范圍。
(5)默認(rèn)值約束:又被稱為:“DEFULT約束”,主要作用是向數(shù)據(jù)庫列字段中插入默認(rèn)的值,該默認(rèn)值可以根據(jù)自己需求來設(shè)置。
2數(shù)據(jù)完整性約束的方法
本文以學(xué)生選課系統(tǒng)數(shù)據(jù)庫(XK)為例,從用戶定義的完整性約束著手,探討MySQL與SQL Server在用戶定義的完整性中五種約束的相同點(diǎn)和不同點(diǎn)。
XK數(shù)據(jù)庫中,有5張表,關(guān)系模式如下:
(1)系部(Department)? (系部編號DepartNo、系部名稱DepartName)
(2)班級(Class)? (班級編號ClassNo、班級名稱ClassName、系部編號DepartNo)
(3)學(xué)生(Student) (學(xué)號StuNo、姓名StuName、密碼pwd、班級編號ClassNo)
(4)課程(Course)? (課程號CouNo、課程名CouName、報(bào)名人數(shù)Willnum、系部編號DepartNo)
(5)選修(StuCou)? (學(xué)號StuNo、課程號CouNo、報(bào)名志愿號Willorder、報(bào)名狀態(tài)State)
2.1 PRIMARY KEY主鍵約束
主鍵用來表示一個(gè)精確定位的特定行,表示行的唯一性,如果沒有主鍵,無法精準(zhǔn)定位一條記錄是否就是你要的相關(guān)行記錄,會導(dǎo)致更新或者刪除表中特定的行很困難。如果有主鍵約束行記錄的唯一性,可以來解決這些問題。
2.1.1 創(chuàng)建primary key
為Department表中DepartNo列創(chuàng)建一個(gè)主鍵約束,代碼如下:
MySQL:
CREATE TABLE Department
(
DepartNoVARCHAR(3)? NOT NULL,
DepartNameVARCHAR(255) NOT NULL,
PRIMARY KEY (DepartNo)? ? ? ? ? ? ? ?//聲明主鍵寫在最后
)
SQL Server:
CREATE TABLE Department
(
DepartNo? VARCHAR(10)? NOT NULL? PRIMARY KEY,? //聲明主鍵緊跟列后
DepartNameVARCHAR(255) NOT NULL
)
假設(shè)表Department存在,要給該表DepartNo列加主鍵主健時(shí),Mysql 和SqlServer都可以用下面SQL語句:
ALTER TABLE Department ADD PRIMARY KEYpk_DepartNo (DepartNo)
2.1.2刪除 PRIMARY KEY 約束
刪除Department表中DepartNo列的主鍵約束,代碼如下:
MySQL:
ALTER TABLE Department DROP PRIMARY KEY
SQL Server:
ALTER TABLE Department DROP constraint PK_DepartNo