天天看點

資料庫 完整性限制定義

1.check限制 範圍

-- 建表時定義性别取值為“男或女” 預設為“男”

-- 年齡在14到65之間(14,65)

-- in (值1,值2,值3...值n)  屬于值1到值n其中之一(詳見聚集函數)

create table Student(

    Sno Char(7) primary key,--學号

    Sname Char(10) not null,--學生姓名

    Ssex Char(2) check(Ssex in('男','女')) default '男'not null,--性别

    Sage Smallint check(Sage>14 and Sage<65)--年齡

); 

2.外碼違約處理方式為删除級聯或更新級聯

-- 成績表Sno(學号)關聯學生表Sno    

-- 成績表Cno(課程号)關聯課程表Cno

-- 設定兩個外鍵違約處理方式為删除級聯和更新級聯

create table Cj(

    Sno Char(7),--學号

    Cno Char(1),--課程号

    Grade Decimal(4,1) check(Grade>0 and Grade<100),--成績

    primary key(Sno,Cno),

    foreign key(Sno) references Student(Sno) on delete cascade on update cascade,

    foreign key(Cno) references Course(Cno) on delete cascade on update cascade

);

建表後添加check限制:

alter table Cj add constraint ck_1 check(Grade>0 and Grade<100);

為外鍵設定了删除級聯和更新級聯,當處理主表時外表受到牽連。即:更新(删除)主表值-》外表相應值也更新(被删除)  

注意:

-- 建表時這樣建立外鍵是錯誤的

create table Borrow(

    bid varchar(6) primary key,

    bkid varchar(6)    foreign key(bkid) references Book(bid) --error  錯誤寫法

);

-- 乖乖這樣吧

create table Borrow(

    bid varchar(6) primary key,

    bkid varchar(6),

    constraint Bor_kid_Book_bid foreign key(bkid) references Book(bid)

);

3.添加,删除,修改限制

3.1添加限制

alter table 表名 add constraint 限制名 限制表達式

alter table Course add constraint CK_Course_Credit  check(Credit in (1,2,3,4));

3.2删除限制

alter table 表名 drop 限制名

alter table Course drop CK__Course__Credit__164452B1;

3.3修改限制