SQL Server 資料庫基本記錄(三)

StaunchKai發表於2018-03-17

繼續上一篇內容 SQL Server 資料庫基本記錄(二)

資料表

資料的完整性:資料的準確性和可靠性,不準確、不一致的資料,則導致資料 失去了完整性

實體完整性

  • 要求表中的所有的行唯一
UserId UserPwd UserName Gender
bobo 123456 王波 0

不能新增以下行,加粗部分表示重複

bobo 123456 王波 0
  • 約束方法:唯一約束、主鍵約束、標識列

域完整性約束

  • 保證列值符合規定要求
UserId UserPwd UserName Gender
bobo 123456 王波 0

不能新增以下行,加粗部分表示密碼長度小於六位

yuyu 1236 王雨 1
  • 約束方法:限制資料型別、檢查約束、外來鍵約束、預設值、非空約束

引用完整性約束

  • 要求兩表相同欄位必須一致
SortId SortName
1 手機數碼
2 圖書音像
3 家用電器

下表相同欄位必須一致,不能填寫主鍵中未存在的內容

SortId CommodityName
1 IPhone 8
1 OnePlus 5
3 三門冰箱

下表不可新增,因為 SortId 不存在 4

SortId CommodityName
4 電商時代
  • 約束方法:外來鍵約束

主外來鍵

主鍵

  1. 表中一列或幾列組合的,能夠唯一標識表中的每一行
  2. 一個表只能有一個主鍵
  3. 多列組合當主鍵稱為複合主鍵

原則:最少性和唯一性

外來鍵

  1. 相對應於主鍵
  2. 一個表可以有多個外來鍵

標識列

  • 自動增長列自動編號
  • 本身沒有具體的含義,只是用來標識不同的實體

標識列的實現方式

  • 標識列用來區分不同的實體
  • 定義成標識列時,需要指定 標識種子標識增量,預設值都為 1
  • 標識列通常也被定義為 主鍵
  • 定義為標識列的列必須是 整型
  • 標識列資料是 自動增加 的,不能手動的為標識列插入值

空值:NULL 在填入資料值時可不填 預設值:表中的某列,使用者不輸入資料的時候,將被自動填入

資料型別

分類 資料型別 說明
文字資料型別
字元資料包括任意字母、符號或數字字元的組合
char
varchar
nchar
nvarchar
text
ntext
固定長度的非 Unicode 字元資料
可變長度非 Unicode 資料
固定長度的 Unicode 資料
可變長度的 Unicode 資料
儲存長文字資訊
儲存可變長度的長文字
日期和時間 datetime
數字資料型別
僅包含數字,包括整數和浮點數
int、smallint、float、real、numcric(18,0) 整數、浮點數
貨幣型別資料
十進位制貨幣值
money
bit 資料型別
表示 是/否 的資料
bit 儲存布林資料型別

建立表

USE E_Market -- 指向當前所操作的資料庫
GO -- 批處理標識
CREATE TABLE CommoditySort	-- 建立名為 CommoditySort 的表
(
	SortId int IDENTITY(1,1) NOT NULL,	-- SortId 列,不允許空值
	SortName varchar(50) NOT NULL	-- SortName 列,長度 50,不允許空值
)
複製程式碼

約束

約束型別

  1. 主鍵約束:要求主鍵列不能為空以及唯一
  2. 非空約束:要求該列不能存在空值
  3. 唯一約束:要求該列的值必須唯一,允許為空,但只能出現一個空值
  4. 檢查約束:限制某列取值的範圍是否合適
  5. 預設約束:設計某列的預設值
  6. 外來鍵約束:用於在兩表之間建立關係,需要指定引用主鍵的時哪一列
  • 主鍵約束與唯一約束的區別 -- 主鍵約束所在的列不允許有空值,唯一約束所列允許空值 -- 每個表中可以有一個主鍵,多個唯一鍵

語法

ALTER TABLE 表名
ADD CONSTRAINT 約束名 約束型別_約束列

E.g:
USE E_Market
GO
-- 為使用者表UserInfo新增約束
ALTER TABLE UserInfo
ADD CONSTRAINT PK_UserId PRIMARY KEY(UserId),	-- 主鍵約束
	CONSTRAINT CK_UserPwd CHECK(LEN(UserPwd)>=6),	-- 唯一約束
	CONSTRAINT CK_Gender CHECK(Gender=0 OR Gender=1),	-- 唯一約束
	CONSTRAINT DF_GENDER DEFAULT(0) FOR Gender,	-- 預設約束
GO
複製程式碼

適用於表中沒有任何資料時,若有資料,會報錯

約束取名規則

推薦採用:約束型別_約束列

約束名 例如
主鍵 (Primary Key) 約束 PK_UserId
唯一 (Unique Key) 約束 UK_UserCardId
預設 (Default Key) 約束 DF_UserPasspwd
檢查 (Check Key) 約束 CK_Gender
外來鍵 (Foreign Key) 約束 FK_SortId

語法_已存在資料

ALTER TABLE 表名 WITH NOCHECK
ADD CONSTRAINT 約束名 約束型別 具體的約束說明

E.g:
-- 向已存在資料的表中新增約束
ALTER TABLE Employee WITH NOCHECK
ADD CONSTRAINT CK_EmployeeId CHECK(LEN(EmployeeId)=18)
GO
複製程式碼

對錶中現有的資料不做檢查,只對新增約束後再錄入的資料進行檢查

刪除約束

ALTER TABLE 表名
DROP CONSTRAINT 約束名

E.g:
-- 刪除檢查約束
ALTER TABLE Employee
DROP CONSTRAINT CK_EmployeeId
GO
複製程式碼
  • 有時候表之間存在關係,刪除約束時提示存在關係,這時需要先刪除主鍵
-- 先刪除主鍵
ALTER TABLE Employee
DROP CONSTRAINT PK_Employee
GO

-- 再刪除檢查約束
ALTER TABLE Employee
DROP CONSTRAINT CK_EmployeeId
GO
複製程式碼

資料庫關係圖

  • 對特定的資料庫表進行視覺化管理與分析
  • 一個資料庫中可以建立多個資料庫關係圖
    SQL Server 資料庫基本記錄(三)

刪除資料表

DROP TABLE 表名

E.g:
IF EXISTS (SELECT * FROM sysobjects WHERE name='CommodityInfo') -- 檢測要刪除的表是否存在
DROP TABLE CommodityInfo
複製程式碼

相關文章