完整性

4.1实体完整性

4.1.1主键约束 PRIMARY KEY

    主键约束在表中定义一个主键来唯一确定表中一行数据的标识符,主键列的数据类型不限,但列必须唯一并且非空。一个表只允许一个主键,主键可以是单个字段或多个字段的组合。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

use test

go

create table tb(

    --单列主键的创建

    id int primary key

)

go

create table tb1(

    id int,

    name varchar(50),

    --多列组合的主键

    CONSTRAINT tb1_id_name_pk PRIMARY KEY(id,name)

)

Go

--为表添加主键

alter table table_name

add

constraint pk_name

primary key(column_name)

--删除主键

alter table table_name

drop

constraint pk_name

4.1.2唯一性约束 UNIQUE

--防止非主键重复

CREATE TABLE Persons

(

Id_P int NOT NULL UNIQUE,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

--多字段

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

)

--添加

ALTER TABLE Persons

ADD UNIQUE (Id_P)

--添加

ALTER TABLE Persons

ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

--删除

ALTER TABLE Persons

DROP CONSTRAINT uc_PersonID

4.1.3标识 IDENTITY

自动编号

CREATE TABLE table_name(

    id int IDENTITY(1,1),

    NAME nvarchar(50) not null,

    sex char(2) default '男',

    note ntext null

)

4.1.4外键约束 FOREIGN KEY

指定必须存在值得列,定义值与同一个表或另一个表的主键值匹配的一列或多列组合

--创建表时添加外键

create table table_name(

    id int primary key,

    id1 int foreign key  )

--已有表添加约束

alter table table_name

add

constraint fk_name

foreign key(columne_name)

--删除外键

alter table table_name

drop

constraint fk_name

4.2值域完整性

4.2.1数据类型

--数字数据类型tinyint,smallint,int,bigint,bit,decimal,numeric,money,smallmoney,float,real

--字符数据类型非Unicode字符数据类型char,varchar,text;Unicode字符数据类型nchar,nvarchar,ntext

--二进制数据类型binary,varbinary,image

--日期和时间date,time,datetime2,datetimeoffset

--空间数据类型平面空间数据类型(geometry)地理空间数据类型(geography)

--hierarchyid数据类型

--sql_variant,timestamp,uniqueidentifier,xml

--自定义数据类型

exec sp_addtype cellphone,'nchar(11)','null'

exec sp_droptype cellphone

--DATE数据类型只输出日期

declare @dt date

set @dt=getdate()

print @dt

--TIME数据类型只输出时间

declare @tm time

set @tm=getdate()

print @tm

--DATETIME2数据类型输出日期时间及有可变精确度的秒

declare @tm2 datetime2(6)

set @tm2=getdate()

print @tm2

--DATETIMEOFFSET数据类型时区区分

declare @dtos1 datetimeoffset(0)

set @dtos1= '2007-12-04 21:20:30 -1:00'

declare @dtos2 datetimeoffset(0)

set @dtos2= '2007-12-04 21:20:30 +5:00'

select datediff(hh,@dtos1,@dtos2)

4.2.2默认值约束 DEFAULT

CREATE TABLE table_name(

    id int IDENTITY(1,1),

    NAME nvarchar(50) not null,

    sex char(2) default '男',

    note ntext null

)

指定列的默认值

--创建一个默认值对象

create default sdept_char

as '信息中心'

go

--为表sdept列绑定默认值

sp_bindefault sdept_char,'student.sdept'

--测试绑定的默认值

insert student(sno,sname,ssex) values('001','类鳄梨','男')

select * from student where sno='001'

--取消默认值绑定

sp_unbindefault 'student.sdept'

--测试取消是否成功

insert student(sno,sname,ssex) values('002','雷海鸣','男')

select * from student

--删除默认值对像

drop default sdept_char

4.2.3检查约束 CHECK

指定列的允许值,指定根据同一个表中其他列的值可在列中接受的数据值

--为表年龄字段添加约束

alter table student

add constraint ck_sage check(sage>=0 and sage<=100)

--测试约束

update student set sage=102 where sno=001

--删除表年龄字段约束

alter table student

drop constraint ck_sage

--测试

update student set sage=102 where sno=001

4.2.4非空约束NOT NULL

指定是否允许为NULL字符

CREATE TABLE table_name(

    id int IDENTITY(1,1),

    NAME nvarchar(50) not null,

    sex char(2) default '男',

    note ntext null

)

4.2.5规则 RULE

--创建规则对象

create rule format

as

@联系电话 like '[0][1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

--修改表添加列

alter table student

add telephone char(12)

--为列绑定规则

sp_bindrule format,'student.telephone'

--测试绑定规则

update student set telephone='00001234567' where sno='001'

update student set telephone='01001234567' where sno='002'

select * from student

--解除绑定规则

sp_unbindrule 'student.telephone'

--测试解除

update student set telephone='00001234567' where sno='001'

select * from student

--删除规则对象

drop rule format

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄