標籤:style io ar color 使用 sp for strong on
--sql約束
/*
(1)提供語義定義完整性條件約束條件的機制
實體完整性:主鍵、非空
????參照完整性:外鍵
????使用者自訂完整性:check、觸發器
(2)提供完整性檢查方法
????一般在:Insert、Update、Delete執行後開始檢查,及事務提交後開始檢查。
(3)違約處理
????拒絕(no action)
????級連(級聯 Cascade)
?
*/
/*幾種約束
非空約束(NOT NULL Constraint )
主鍵約束(Primary Key Constraint)
外鍵約束(Foreign Key Constraint)
唯一性限制式(Unique Constraint)
檢查約束(Check Constraint)
預設值約束(Default Constraint)
?
*/
?
--主鍵約束
--【例1】實體完整性約束。
CREATE TABLE student1 (
????sno char (9) PRIMARY key , --//資料行層級條件約束
????sname varchar (10) ,
????ssex char (2) ,
????sage int NULL ,
????sdept char (10) ) --,
--或 PRIMARY key(sno)) --//表級約束
?
--表級約束
CREATE TABLE sc1 (
????sno char(9) ,
????cno char(3) ,
????grade int,
primary key(sno,cno) -- //表級約束
)
?
?
--參照完整性定義
--Foreign key(列名) references table_name(列名)
--注意要參考的列應該和被參考列的長度,資料類型相同
sp_help course;
sp_help student;
--【例2】參照完整性執行個體 (列級、表級均可)。
CREATE TABLE sc2 (
????sno char(9),
????cno char(4),
????grade int ,
primary key(sno,cno) ,
foreign key(cno) references course(cno),
foreign key(sno) references student(sno)
);
?
?
--測試約束
CREATE TABLE sc3 (
????sno char(9) ,
????cno char(4) ,
????grade int ,
primary key(sno,cno) ,
foreign key(sno) references student(sno)
on delete no action --當刪除student的記錄的時候 會失敗
on update cascade --但更新student的記錄時 sc3表中的記錄也會更新
) ;
--恰當使用串聯更新和串聯刪除 方便資料庫在更新時的操作;
insert into student(sno) values(‘2014019‘);
insert into sc3 values(‘2014019‘,‘001‘,100);
?
?
delete from student where sno=‘2014019‘;
update student set sno=‘122222‘ where sno=‘2014019‘;
?
select * from sc3;
--在刪除該約束後就可以成功刪除了
--當你不給約束起名字的時候 DBMS會自動給該約束起一個名字
--sp_help sc3;
alter table sc3 drop FK__sc3__sno__398D8EEE;
?
drop table sc3;
SQLserver資料的完整性