標籤:外鍵 ide 資料 guid 添加 允許 設定 tin 聯合主鍵
一.約束
資料完整性:正確的,一致的 資料.
設計人員:資料表建立之前
實現資料完整性:
1.實體完整性:(行 唯一不重複)
作用:保證行 唯一不重複
技術手段:主鍵約束 primary key(pk)
**表可以沒有主鍵,但是除非特殊情況表都會有主鍵,從而保證實體完整性.
**特點:不能重複,不可為空(null),一個表只能有一個主鍵,但可以是聯合主鍵
**主鍵可以修改,但改完後要保證唯一不重複.
唯一值約束 unique (uq)
**unique 唯一值約束(是主鍵primary key的重要補充)
**作用:行唯一不重複
**一個表裡可以有多個unique
**unique 允許為null,但是只能有一行為null
輔助技術:識別屬性 identity
** 識別屬性(產生自動編號)
**唯讀
**一個表只能有一個識別屬性
**加在整數類型
**永遠僅向前產生新資料,除非重建
全球唯一標識 GUID
**產生函數 new id
2.值域完整性:(列)
作用:對列進行範圍,格式,選項 進行限制
技術手段:資料類型 age varchar(50)
null 允許為null,not null必填
檢查約束 check(ck)
預設值約束 default(df)
**and(與)or(或)not(非)
like萬用字元
**%:任一字元,任意個數
**_:任一字元,一個字元,‘張_‘標識張後面有一個字元
**[]:在範圍內,[0-9]
**[^]:不在範圍內[^0-5]
3.參考完整性:(兩個表之間)
作用:通過給兩個表之間的相關欄位建立關係,從而保證兩個表之間的資料的一致性
例子:
use Practice
CREATE TABLE studentInfo
(
Id int primary key,
Name varchar(20),
Age int check(Age>=18 and Age<=60)
)
CREATE TABLE score
(
[Subject] varchar(50),
Id int foreign key references studentInfo(Id)
--建立關係的兩個關聯欄位
--名字可以不同 但是類型以及長度必須一致
)
技術:外鍵 foreign key(fk)
**主從表的原則:
**只有主表中存在的資料才能添加到從表中
規律:
添加時:先主表,後從表
刪除時:先從表,後主表
**********************************************************************************************************************
二.結構和約束操作
修改結構
--1.結構修改
--添加列
ALTER TABLE Test--修改表Test
ADD [address] varchar(100)not null--添加address列
--修改列 列的類型,長度,空或非空
ALTER TABLE Test--修改表Test
ALTER COLUMN [address]nvarchar(50) null--修改列(COLUMN)
--刪除列
ALTER TABLE Test--修改表Test
DROP COLUMN [address]--刪除列[列名]
--2.修改約束
添加約束
ALTER TABLE Test--修改表
ADD CONSTRAINT PK_test_id --添加主鍵約束給PK_test_id
primary key (id)--具體約束條件
--刪除約束
練習:
--練習:
--1 為test 表的age欄位添加檢查約束,要求成年.
--2 添加生日欄位.
--3 設定生日的預設值為:1980-01-01.
--4 修改test表,要求name列唯一.
--eg1:
ALTER TABLE Test
ADD CONSTRAINT CK_test_age
CHECK (age>=18)
--eg2:
ALTER TABLE Test
ADD [birthday]nvarchar(20) null
--eg3
ALTER TABLE Test--修改表
ADD CONSTRAINT df_test_birthday--添加約束
DEFAULT ‘1980-01-01‘ for birthday--預設值(default) XXXX for 欄位
--eg4
ALTER TABLE Test--修改表
ADD CONSTRAINT UQ_Test_Name --添加唯一值約束
UNIQUE(name)--唯一值(欄位名)
**********************************************************************************************************************
三.DML([資料]操作語言)
--SQL(基本技能)
--1. INSERT 增加
--文法:
--INSERT [INTO] tab_name[(colName,colName2...列的列表)]
--VALUES(value1,value2...值的列表與列的列表匹配),
--(),()一次添加多行
--eg1:(給所有列添加資料)
--1.
INSERT INTO info (sname,sex,birthday,address,tel)
VALUES(‘趙明月‘,0,‘1982-3-6‘,‘吉林‘,‘0432-12345678‘)
--2.
INSERT info VALUES(‘房祖名‘,1,‘1980-2-25‘,‘北京‘,‘010-123123123‘)
select * from info
INSERT INTO info(sname,sex,birthday,address,tel)
VALUES(‘金錢豹‘,1,‘1970-5-9‘,‘天津‘,‘13412362322‘)
INSERT info VALUES(‘趙月‘,0,‘1988-4-26‘,‘長沙市‘,‘03318658888‘)
select * from info
--添加部分列資料
--1.
INSERT INTO info(sname,birthday,tel)
VALUES(‘JACK‘,‘1999-02-04‘,‘1888888888‘)
--2.
INSERT INTO info
VALUES(‘JACK‘,NULL,‘1999-02-04‘,NULL,‘01088888888‘)
UPDATE info SET tel=‘18888888888‘WHERE tel=‘01088888888‘
**********************************************************************************************************************
SQLserver約束以及對約束和結構的操作