1. 程式人生 > >資料庫中的完整性約束及例項

資料庫中的完整性約束及例項

宣告資料完整性和過程資料完整性 
(1)使用IDENTITY(識別符號)列 
語法格式: 
CREATE TABEL 資料表名 
(列名 列資料型別 IDENTITY [(種子, 增量)] [,…]) 
說明:標識種子為標識列的起始值,標識遞增量為每次增加的數,二者的預設值均為1。 
(2)使用IDENTITY函式 
語法格式: 
IDENTITY ( 資料型別 [ , 種子 , 遞增量 ] ) AS 列名 
說明:只用在帶有 INTO table 子句的 SELECT 語句中,可以將標識列插入到新表中。 
儘管類似,但是 IDENTITY 函式不是與 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 屬性。 

完整性型別 約束型別 描述 
域 DEFAULT 指定列的預設值 
CHECK 指定列的允許值 
FOREIGN KEY 指定必須存在值的列 
NULL 指定是否允許為NULL 
實體 PRIMARY KEY 唯一標識每一行 
UNIQUE 防止非主鍵重複 
引用 FOREIGN KEY 定義值與同一個表或另一個表的主鍵值匹配的一列或多列組合 
CHECK 指定根據同一個表中其他列的值可在列中接受的資料值 
      
在SQL SERVER中,對於基本表的約束分為列約束和表約束。 
完整性約束的基本語法格式為: 
         [CONSTRAINT constraint_name(約束名)] <約束型別> 
         約束不指定名稱時,系統會給定一個名稱。 
         在SQL Server 2005中有6種約束:主鍵約束(primary key constraint)、惟一性約束(unique constraint)、檢查約束(check constraint)、預設約束(default constraint)、外部鍵約束(foreign key constraint)和空值(NULL)約束。 
PRIMARY KEY 約束 
PRIMARY KEY約束用於定義基本表的主鍵,它是惟一確定表中每一條記錄的識別符號,其值不能為NULL,也不能重複,以此來保證實體的完整性。PRIMARY KEY與UNIQUE約束類似,通過建立唯一索引來保證基本表在主鍵列取值的唯一性,但它們之間存在著很大的區別: 
①一個表只能有一個 PRIMARY KEY 約束 ,但可定義多個UNIQUE約束; 
②對於指定為PRIMARY KEY的一個列或多個列的組合,其中任何一個列都不能出現空值,而對於UNIQUE所約束的唯一鍵,則允許為空。 
注意:不能為同一個列或一組列既定義UNIQUE約束,又定義PRIMARY KEY約束; 
PRIMARY KEY既可用於列約束,也可用於表約束。 
(2)使用Transact-SQL語句操作法設定主鍵約束,其語法形式如下: 
   PRIMARY  KEY  
   CONSTRAINT  constraint_name  PRIMARY  KEY  ( column_name ) 
舉例:建立一個SC表,定義SNO,CNO共同組成SC的主鍵 
程式清單如下: 
create table sc( 
     sno char(5) not null, 
cno char(5) not null, 
score numeric (3), 
constraint sc_prim primary key(sno,cno) 

UNIQUE約束 
         惟一性約束用於指定一個或者多個列的組合值具有惟一性,以防止在列中輸入重複的值。定義了UNIQUE約束的那些列稱為唯一鍵,系統自動為唯一鍵建立唯一索引,從而保證了唯一鍵的唯一性。 
當使用惟一性約束時,需要考慮以下幾個因素: 
• 使用惟一性約束的欄位允許為空值; 
• 一個表中可以允許有多個惟一性約束; 
• 可以把惟一性約束定義在多個欄位上; 
• 惟一性約束用於強制在指定欄位上建立一個惟一性索引; 
• 預設情況下,建立的索引型別為非聚集索引。 
使用Transact-SQL語句完成惟一性約束的操作,其語法形式如下: 
•     UNIQUE 
•     CONSTRAINT  constraint_name UNIQUE ( column_name ) 
CHECK 約束 
         檢查約束對輸入列或者整個表中的值設定檢查條件,以限制輸入值,保證資料庫資料的完整性。 
當使用檢查約束時,應該考慮和注意以下幾點: 
• 一個列級檢查約束只能與限制的欄位有關;一個表級檢查約束只能與限制的表中欄位有關; 
• 一個表中可以定義多個檢查約束; 
• 每個CREATE TABLE語句中每個欄位只能定義一個檢查約束; 
• 在多個欄位上定義檢查約束,則必須將檢查約束定義為表級約束; 
• 當執行INSERT語句或者UPDATE語句時,檢查約束將驗證資料; 
• 檢查約束中不能包含子查詢。 
用Transact-SQL語句建立檢查約束。其語法形式如下: 
•    CONSTRAINT  constraint_name  CHECK  (logical_expression) 
•    CHECK  (logical_expression) 
create table sc( 
     sno char(5) not null, 
cno char(5) not null, 
     score numeric(5,1) constraint score_chk check(score>=0 and score <=100), 
constraint sc_prim primary key(sno,cno), 
     

drop table sc 
insert into sc values('1','2',3) 
DEFAULT 約束 
         預設約束指定在插入操作中如果沒有提供輸入值時,則系統自動指定值。預設約束可以包括常量、函式、不帶變元的內建函式或者空值。 
使用預設約束時,應該注意以下幾點: 
(1)每個欄位只能定義一個預設約束; 
(2)如果定義的預設值長於其對應欄位的允許長度,那麼輸入到表中的預設值將被截斷; 
(3)不能加入到帶有IDENTITY屬性或者資料型別為timestamp的欄位上; 
(4)如果欄位定義為使用者定義的資料型別,而且有一個預設繫結到這個資料型別上,則不允許該欄位有預設約束。 
建立預設約束的Transact-SQL語句操作法。其語法形式如下: 
•     CONSTRAINT  constraint_name  DEFAULT  constraint_expression  [FOR  column_name] 
•      DEFAULT  constraint_expression  [FOR  column_name] 
舉例:為 dept欄位建立預設約束。 
程式清單如下: 
constraint  con_dept  default  ‘計算機’  for  dept 
NULL 約束 
空值約束用來控制是否允許該欄位的值為NULL。NULL值不是0也不是空白,更不是填入字串的“NULL”字串,而是表示“不知道”、“ 不確定”或“沒有資料”的意思。 
       當某一欄位的值一定要輸入才有意義的時候,則可以設定為NOT NULL。如主鍵列就不允許出現空值,否則就失去了唯一標識一條記錄的作用。空值約束只能用於定義列約束。 
FOREIGN KEY 約束 
     FOREIGN KEY約束是用於建立和加強兩個表資料之間的連結的一列或多列。外部鍵約束用於強制參照完整性。 

FOREIGN KEY 約束確保同一個表或者不同表之間的引用完整性 
必須引用一個PRIMARY KEY或者UNIQUE約束 
使用者必須在應用表上具有REFERENCES許可權 
一個表中最多可以有31個外部鍵約束; 
在臨時表中,不能使用外部鍵約束; 
主鍵和外部鍵的資料型別必須嚴格匹配 。 

使用Transact-SQL語句設定外部鍵約束 ,其語法形式如下: 
  CONSTRAINT  constraint_name 
  FOREIGN  KEY  (column_name[,…n]) 
  REFERENCES  ref_table  [(ref_column[,…n])] 
ALTER TABLE [Sales].[SalesOrderHeader]  WITH CHECK 
ADD CONSTRAINT [FK_SalesOrderHeader_Customer_CustomerID] 
FOREIGN KEY([CustomerID]) 
REFERENCES [Sales].[Customer] ([CustomerID]) 
禁用 CHECK 和 FOREIGN KEY 約束: 
 當執行大型批處理作業時提高效能 

相關推薦

資料庫完整性約束例項

宣告資料完整性和過程資料完整性  (1)使用IDENTITY(識別符號)列  語法格式:  CREATE TABEL 資料表名  (列名 列資料型別 IDENTITY [(種子, 增量)] [,…])  說明:標識種子為標識列的起始值,標識遞增量為每次增加的數,二者的預設值均為1。  (2)使用IDENTIT

五、資料庫完整性約束

  一、介紹 約束條件與資料型別的寬度一樣,都是可選引數 作用:用於保證資料的完整性和一致性主要分為: PRIMARY KEY (PK) 標識該欄位為該表的主鍵,可以唯一的標識記錄 FOREIGN KEY (FK) 標識該欄位為

Django基礎-----ORM簡介、資料庫資料操作簡單的一對多模型

一:ORM 物件關係對映,是一種程式技術,用於實現面向物件程式語言裡不同型別系統的資料之間的轉換 。從效果上說,它其實是建立了一個可在程式語言裡使用的–“虛擬物件資料庫”。 在ORM框架中,它幫我們把類和資料表進行了一個對映,可以讓我們通過類和類物件就能操作它所對應的表格中的資料。ORM框架

資料庫基礎知識:資料庫約束和三大正規化

一.資料庫中的正規化:   正規化, 英文名稱是 Normal Form,它是英國人 E.F.Codd(關係資料庫的老祖宗)在上個世紀70年代提出關係資料庫模型後總結出來的,正規化是關係資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法,以下就是對

資料庫完整性約束(ForeignKey ,Unique)

文字轉自於 海燕.部落格   一、介紹 約束條件與資料型別的寬度一樣,都是可選引數 作用:用於保證資料的完整性和一致性主要分為: PRIMARY KEY (PK) 標識該欄位為該表的主鍵,可以唯一的標識記錄 FOREIGN KEY (FK) 標識該欄位為

Sql Server 資料庫完整性約束

在資料庫中有四種類型的約束來保證完整性: 域完整性 ——  對列的約束 實體完整性 —— 對行的約束(不能用重複行) 引用完整性 —— 一個表中的某列值是引自另一個表的 自定義完整性(這個可能有點深奧,未進行了解) 1.保證域完整性的約束方法:檢查約束、預設

mysql學習【第5篇】:資料庫完整性約束 資料庫完整性約束

資料庫之完整性約束 一、介紹 約束條件與資料型別的寬度一樣,都是可選引數 作用:用於保證資料的完整性和一致性主要分為:

MySQL資料庫--外來鍵約束外來鍵使用

什麼是主鍵、外來鍵 關係型資料庫中的一條記錄中有若干個屬性,若其中某一個屬性組(注意是組)能唯一標識一條記錄,該屬性組就可以成為一個主鍵。 比如: 學生表(學號,姓名,性別,班級) 其中每個學生的學號是唯一的,學號就是一個主鍵 課程

jsp資料庫插入資料中文亂碼問題

首先附上最剛開始的程式碼,功能是向資料庫中插入資料,資料庫中的屬性如下: <% String action = request.getParameter("action"); //表單中提交過來的資料。 if(action != null &&

檢視MYSQL資料庫所有使用者擁有許可權

如何檢視授權的所有使用者 SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 撤銷已經賦予給 MySQL 使用者許可權的許可權。 revoke 跟 grant 的語法差不多,只需要把關鍵字

建立表、修改表、刪除表的方法 ,建立主鍵約束、外來鍵約束、使用者自定義約束的方法 ,建立查詢表的方法使用截斷表的方法,理解約束資料庫的作用

撰寫人——軟工二班——陳喜平 – 實驗內容: – 一、建立表 – 建立圖書館管理系統所涉及的表 – 建立產品銷售系統所涉及的表 – 圖書表book(bid,bname,price,qty) – 書庫表lib(lid,lname,address) – 讀者表reader

javaMysql資料庫連線例項

目標:通過在eclipse中載入mysql驅動,將users表中的資料提取出來。 1.建立資料庫 在mysql資料庫中test目錄下建立users資料庫。存取欄位:id username password。 2.構建java專案 2.1 在構建的

sql表達完整性約束

AC enc 語義 表名 .so del eat HA pos sql中表達完整性約束 sql約束性分為實體完整性,參照完整性,用戶定義完整性,刪除約束 實體完整性 1.建表時定義主鍵 Create table 表名 ( Sno

數據庫的sql語句完整性約束

處理 hang tid 否則 都是 生成 添加 cti 增長 完整性約束   完整性約束是為了表的數據的正確性!如果數據不正確,那麽一開始就不能添加到表中。 1 主鍵 當某一列添加了主鍵約束後,那麽這一列的數據就不能重復出現。這樣每行記錄中其主鍵列的值就是這一行的唯一標識。

2018.11.13 Hibernate 資料庫查詢的Criteria查詢例項

Criteria是面向物件的無語句查詢 Demo.java package com.legend.b_criteria; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import

sqlserver資料庫設計完整性約束

1 use StudentManageDB 2 go 3 --建立主鍵約束 4 5 if exists(select * from sysobjects where name='pk_StudentId') 6 alter table Students drop constraint pk

Sqlit3資料庫的詳細講解一些在python的小技巧

資料庫的基本概念。 庫 schema:好像整個表格文件。好像一個物流公司共佔地100畝,蓋了50個倉庫,A01倉庫負責儲存河南客戶貨物,A02倉庫負責儲存廣州xx專案物料。每一個倉庫對應一個專案。 表 table:對應Excel表格裡sheet1 sheet2。由行內內

Python函式定義引數例項

1.函式定義 函式就是完成特定功能的一個語句組,這組語句可以作為一個單位使用,並且給它取一個名字 ,可以通過函式名在程式的不同地方多次執行(這通常叫函式呼叫) 預定義函式(可以直接使用) 自定義函式(自己編寫) 為什麼使用函式? 降低程式設計難度,通常將

Oracel資料庫檢視與同義詞的理解應用場景

轉載至: https://blog.csdn.net/u012411219/article/details/51321162 1. 資料庫物件之【檢視】簡單介紹    1.1 What:什麼叫檢視?          

scrapy-redis例項,分佈爬蟲爬取騰訊新聞,儲存在資料庫

本篇文章為scrapy-redis的例項應用,原始碼已經上傳到github: https://github.com/Voccoo/NewSpider 使用到了: python 3.x redis scrapy-redis pymysql Redis-Desktop-Manage