溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解關(guān)系型數(shù)據(jù)庫的約束機制

發(fā)布時間:2021-11-29 10:23:51 來源:億速云 閱讀:175 作者:柒染 欄目:數(shù)據(jù)庫

這篇文章將為大家詳細講解有關(guān)如何理解關(guān)系型數(shù)據(jù)庫的約束機制,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

一. 關(guān)系型數(shù)據(jù)庫

市場上主流的關(guān)系型數(shù)據(jù)庫:Oracle、DB2、Sybase 、PostgreSQL、Microsoft SQL Server、Microsoft  Access、MySQL

關(guān)系型數(shù)據(jù)庫有三大完整性:

實體完整性:實體屬性中的標識屬性不能為空、不能重復,該約束通過制定的主鍵實現(xiàn),其約束有系統(tǒng)強制實施

參照完整性:實體中的外鍵可以為空,但不能是錯的。

用戶定義完整性:某一具體的實際數(shù)據(jù)庫的約束條件,由應用環(huán)境所決定,反映某一具體應用所涉及的數(shù)據(jù)必須滿足的要求。(例如定義某一行不能為空)

約束主要完成對數(shù)據(jù)的檢驗和限制,從而保證數(shù)據(jù)庫的完整性。

二.約束

1.主鍵約束(PRIMARY KEY)

主鍵約束列不允許重復,也不允許出現(xiàn)空值。

單列主鍵

創(chuàng)建有兩種方式:

一種是直接對字段加primary key關(guān)鍵字:

CREATE TABLE student(           id INT PRIMARY KEY,                    name VARCHAR(20),                     )

另外一種是通過額外加約束的方式:

CREATE TABLE student(           id INT NOT NULL,                    name VARCHAR(20),           CONSTRAINT PK_STUD_ID PRIMARY KEY(id)          //PK_STUD_ID為約束的名字                     )

聯(lián)合主鍵

有時候一個列的字段可能有重復,可以聯(lián)合多個列設(shè)為主鍵。

CREATE TABLE student(                  name VARCHAR(20),           class VARCHAR(20),          CONSTRAINT PK_STUD_ID PRIMARY KEY(name,class)                  )

其它操作

//刪除主鍵約束   ALTER TABLE 表名 DROP PRIMARY KEY;     //添加主鍵   ALTER TABLE 表名 ADD PRIMARY KEY(列名);     //修改列為主鍵 ALTER TABLE 表名 MODIFY 列名 數(shù)據(jù)類型 PRIMARY KEY;

2.外鍵約束(FOREIGN KEY)

外鍵約束是保證一個或兩個表之間的參照完整性,保持數(shù)據(jù)一致性。

實現(xiàn)一對一或一對多關(guān)系。

創(chuàng)建外鍵約束

CREATE TABLE classes(           id INT AUTO_INCREMENT PRIMARY KEY,           name VARCHAR(20)            );   //***種:添加關(guān)鍵字 CREATE TABLE student(           id INT AUTO_INCREMENT,                    name VARCHAR(20),                     CONSTRAINT PK_ID PRIMARY KEY(id),                                   class_id INT REFERENCES classes(id)            ) //第二種:額外聲明 CREATE TABLE student(           id INT AUTO_INCREMENT,                    name VARCHAR(20),                     CONSTRAINT PK_ID PRIMARY KEY(id),                                   class_id INT,           CONSTRAINT fk_class_id FOREIGN KEY(classe_id) REFERENCES classes(id)           )

外鍵約束的要求

  • 父表和子表必須使用相同的存儲引擎,而且禁止使用臨時表

  • 數(shù)據(jù)表的存儲引擎只能為InnoDB,default-storage-engine-INNODB

  • 外鍵列和參照列必須具有相似的數(shù)據(jù)類型,數(shù)字的長度或是有符號位必須相同,而字符 的長度可以不同

  • 外鍵列和參照列必須創(chuàng)建索引,如果外鍵列不存在索引的話,MySQL將自動創(chuàng)建索引。    
    設(shè)定參照列:FOREIGN KEY(id) PEFERENCES provinces(id)

外鍵約束的參照操作

  • CASCADE:從父表刪除或更新且自動刪除或更新子表中匹配的行

  • SET NULL:從父表刪除或更新行,并設(shè)置子表中的外鍵列為NULL,如果使用該選項,必須保證子表列沒有指定NOT NULL

  • RESTRICT:拒絕對父表的刪除或更新操作

  • NO ACTION:標準SQL的關(guān)鍵字,在MySQL中與RESTRICT相同

其它操作

//刪除外鍵約束  ALTER TABLE 表名 DROP FOREIGN KEY 外鍵約束名; (創(chuàng)建外鍵的方法沒有指定約束名稱,系統(tǒng)會默認給外鍵約束分配外鍵約束名稱,命名為student_ibfk_n)  //增加外鍵約束   ALTER TABLE 表名 ADD FOREIGN KEY 列名 REFERENCES 父表(對應列名);

3.***約束(UNIQUE)

指定表中某一列或多個列不能有相同的兩行或者兩行以上的數(shù)據(jù)存在,

  • ***約束可以保證記錄的***性

  • ***約束的字段可以為空值(允許的空值有多個,但是最終存儲的只有一個)

  • 每張數(shù)據(jù)表可以存在多個***約束

UNIQUE KEY的用途:主要是用來防止數(shù)據(jù)插入的時候重復。

CREATE TABLE student (   name CHAR(20) UNIQUE KEY  );

為表中列添加UNIQUE KEY

ALTER TABLE student MODIFY CHAR(20) UNIQUE KEY;

4.非空約束(NOT NULL)

輸入值必須是非空的,需要注意的是允許控制盡量不要太多,太多會更消耗數(shù)據(jù)庫性能。

CREATE TABLE student (   name CHAR(20) NOT NULL  );

5.默認約束(DEFAULT)

默認約束有以下的要求:

  • 定義的常量必須與該列的數(shù)據(jù)類型、精度等匹配

  • 每個列只能定義一個DEFAULT約束

  • DEFAULT約束會在使用INSERT語句

這里需要說明的是,DEFAULT后面不能像SQL Server那樣使用函數(shù),后面只能是一個常量。官方文檔原文:

With one exception, the default value must be a constant; it cannot be a  function or an expression.

如果我們想要獲取當前的時間,可以使用CURRENT_TIMESTAMP

CREATE TABLE student (    joinTime DATETIME DEFAULT CURRENT_TIMESTAMP  );

6.CHECK約束

CHECK約束,驗證數(shù)據(jù),比如性別中只能為女或男,而不能為其它。MySQL不支持check約束,但可以使用check約束,就是沒有任何效果。

關(guān)于如何理解關(guān)系型數(shù)據(jù)庫的約束機制就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI