偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

淺析關(guān)系型數(shù)據(jù)庫(kù)的約束機(jī)制

數(shù)據(jù)庫(kù) MySQL
市場(chǎng)上主流的關(guān)系型數(shù)據(jù)庫(kù):Oracle、DB2、Sybase 、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL。約束主要完成對(duì)數(shù)據(jù)的檢驗(yàn)和限制,從而保證數(shù)據(jù)庫(kù)的完整性。

 

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

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

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

實(shí)體完整性:實(shí)體屬性中的標(biāo)識(shí)屬性不能為空、不能重復(fù),該約束通過(guò)制定的主鍵實(shí)現(xiàn),其約束有系統(tǒng)強(qiáng)制實(shí)施

參照完整性:實(shí)體中的外鍵可以為空,但不能是錯(cuò)的。

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

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

二.約束

1.主鍵約束(PRIMARY KEY)

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

單列主鍵

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

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

  1. CREATE TABLE student( 
  2.           id INT PRIMARY KEY,          
  3.           name VARCHAR(20),           
  4.           ) 

 另外一種是通過(guò)額外加約束的方式:

  1. CREATE TABLE student( 
  2.           id INT NOT NULL,          
  3.           name VARCHAR(20),  
  4.          CONSTRAINT PK_STUD_ID PRIMARY KEY(id) 
  5.          //PK_STUD_ID為約束的名字           
  6.           ) 

 聯(lián)合主鍵

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

  1. CREATE TABLE student(        
  2.           name VARCHAR(20), 
  3.           class VARCHAR(20), 
  4.          CONSTRAINT PK_STUD_ID PRIMARY KEY(name,class)        
  5.           ) 

其它操作

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

 2.外鍵約束(FOREIGN KEY)

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

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

創(chuàng)建外鍵約束

  1. CREATE TABLE classes( 
  2.           id INT AUTO_INCREMENT PRIMARY KEY
  3.           name VARCHAR(20)  
  4.           );   
  5. //***種:添加關(guān)鍵字 
  6. CREATE TABLE student( 
  7.           id INT AUTO_INCREMENT,          
  8.           name VARCHAR(20),           
  9.           CONSTRAINT PK_ID PRIMARY KEY(id),                         
  10.           class_id INT REFERENCES classes(id)  
  11.           ) 
  12. //第二種:額外聲明 
  13. CREATE TABLE student( 
  14.           id INT AUTO_INCREMENT,          
  15.           name VARCHAR(20),           
  16.           CONSTRAINT PK_ID PRIMARY KEY(id),                         
  17.           class_id INT
  18.           CONSTRAINT fk_class_id FOREIGN KEY(classe_id) REFERENCES classes(id) 
  19.           ) 

 外鍵約束的要求

  • 父表和子表必須使用相同的存儲(chǔ)引擎,而且禁止使用臨時(shí)表
  • 數(shù)據(jù)表的存儲(chǔ)引擎只能為InnoDB,default-storage-engine-INNODB
  • 外鍵列和參照列必須具有相似的數(shù)據(jù)類型,數(shù)字的長(zhǎng)度或是有符號(hào)位必須相同,而字符 的長(zhǎng)度可以不同
  • 外鍵列和參照列必須創(chuàng)建索引,如果外鍵列不存在索引的話,MySQL將自動(dòng)創(chuàng)建索引。
    設(shè)定參照列:FOREIGN KEY(id) PEFERENCES provinces(id)

外鍵約束的參照操作

  • CASCADE:從父表刪除或更新且自動(dòng)刪除或更新子表中匹配的行
  • SET NULL:從父表刪除或更新行,并設(shè)置子表中的外鍵列為NULL,如果使用該選項(xiàng),必須保證子表列沒有指定NOT NULL
  • RESTRICT:拒絕對(duì)父表的刪除或更新操作
  • NO ACTION:標(biāo)準(zhǔn)SQL的關(guān)鍵字,在MySQL中與RESTRICT相同

其它操作

  1. //刪除外鍵約束 
  2.  ALTER TABLE 表名 DROP FOREIGN KEY 外鍵約束名; 
  3. (創(chuàng)建外鍵的方法沒有指定約束名稱,系統(tǒng)會(huì)默認(rèn)給外鍵約束分配外鍵約束名稱,命名為student_ibfk_n) 
  4.  
  5. //增加外鍵約束  
  6.  ALTER TABLE 表名 ADD FOREIGN KEY 列名 REFERENCES 父表(對(duì)應(yīng)列名); 

3.***約束(UNIQUE)

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

  • ***約束可以保證記錄的***性
  • ***約束的字段可以為空值(允許的空值有多個(gè),但是最終存儲(chǔ)的只有一個(gè))
  • 每張數(shù)據(jù)表可以存在多個(gè)***約束

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

  1. CREATE TABLE student 
  2.   name CHAR(20) UNIQUE KEY 
  3.  ); 

為表中列添加UNIQUE KEY

  1. ALTER TABLE student MODIFY CHAR(20) UNIQUE KEY

4.非空約束(NOT NULL)

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

  1. CREATE TABLE student 
  2.   name CHAR(20) NOT NULL 
  3.  ); 

 5.默認(rèn)約束(DEFAULT)

默認(rèn)約束有以下的要求:

  • 定義的常量必須與該列的數(shù)據(jù)類型、精度等匹配
  • 每個(gè)列只能定義一個(gè)DEFAULT約束
  • DEFAULT約束會(huì)在使用INSERT語(yǔ)句

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

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

如果我們想要獲取當(dāng)前的時(shí)間,可以使用CURRENT_TIMESTAMP

  1. CREATE TABLE student 
  2.    joinTime DATETIME DEFAULT CURRENT_TIMESTAMP 
  3.  ); 

6.CHECK約束

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

責(zé)任編輯:龐桂玉 來(lái)源: segmentfault
相關(guān)推薦

2018-07-18 09:16:39

關(guān)系型非關(guān)系型數(shù)據(jù)庫(kù)

2010-06-07 13:30:15

2021-09-06 10:24:12

鴻蒙HarmonyOS應(yīng)用

2017-03-17 14:44:04

關(guān)系型數(shù)據(jù)庫(kù)原理

2010-12-10 10:17:21

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

2022-06-13 08:30:01

數(shù)據(jù)庫(kù)管理系統(tǒng)

2009-08-24 13:31:38

C# 泛型約束

2009-08-24 13:41:23

C# 泛型約束

2018-03-26 12:58:52

數(shù)據(jù)庫(kù)OracleMySQL

2011-06-07 17:14:15

關(guān)系型數(shù)據(jù)庫(kù)壓縮技術(shù)

2013-04-26 16:18:29

大數(shù)據(jù)全球技術(shù)峰會(huì)

2021-01-26 13:31:48

數(shù)據(jù)庫(kù)關(guān)系型數(shù)據(jù)庫(kù)冗余

2023-05-22 16:10:51

動(dòng)態(tài)共享包數(shù)據(jù)庫(kù)

2023-05-20 08:11:55

2021-07-28 14:40:57

鴻蒙HarmonyOS應(yīng)用

2022-07-27 08:32:01

數(shù)據(jù)庫(kù)MySQL

2022-12-27 08:38:45

關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)

2009-08-24 12:58:15

C# 泛型約束

2023-03-30 09:27:43

2011-05-26 10:30:12

Oracle數(shù)據(jù)庫(kù)約束
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)