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