十五、约束
什么是约束?
SqlServer数据库为了保存的数据更具备准确性,一致性,在SqlServer中支持的有约束,有规则来限
定,如果符合规则就可以保存,如果不符合,就不能保存。SQL下有以下几种约束:
1. 主键约束
2. 外键约束
3. Not Null约束
4. 唯一约束
5. 检查约束
一、主键约束(PRIMARY KEY)
主键在每个表中对应的一行记录的唯一的标识,且主键同时要设置Not Null约束,如果在指定主键约
束时没有指定Not Null约束,SQL Server会自动添加Not Null约束,下面使用图片演示创建表时指定
主键约束
主键:唯一的标识----人的身份信息---身份证---身份证号码
汇集多个特点于一身:唯一标识,非空,聚集索引--排序
CREATE TABLE [dbo].[Company]( [Id] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL, [Name] [varchar](50) NULL, [CreateTime] [datetime] NULL, [CreatorId] [int] NOT NULL, [LastModifierId] [int] NULL, [LastModifyTime] [datetime] NULL, [NewName] [dbo].[CompanyName] NULL, CONSTRAINT [PK_Company] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
二、外键约束
外键是指在表中保存其他表的主键,同样的外键一样需要设置Not Null约束,下面使用图片演示创表时
添加外键约束;
Company:公司----SysUser 职员---主键(公司的唯一标识)
SysUser: 信息--包含了所属公司, (需要保存用户的公司信息,就保存Compnay的主键
USE [ZhaoxiEdu] GO ALTER TABLE [dbo].[SysUser] WITH NOCHECK ADD CONSTRAINT [FK_SysUser_Company] FOREIGN KEY([CompanyId]) REFERENCES [dbo].[Company] ([Id]) GO ALTER TABLE [dbo].[SysUser] CHECK CONSTRAINT [FK_SysUser_Company] GO
三、Not Null约束
在表中,被指定Not Null约束的列的值不能为null,下面使用图片演示添加和删除Not Null约束,首先
是添加Not Null约束
update [ZhaoxiEdu].[dbo].[Company] set NewName=null where id=2
四、唯一约束/唯一索引
唯一约束是保证该数据在表数据中是唯一的,下面是唯一约束的核心价值。
userInfo表----很多字段---No(用户的身份证号码)---不应该出现重复。
USE [ZhaoxiEdu] GO /****** Object: Index [IX_SysUser] Script Date: 2022/8/24 16:04:17 ******/ ALTER TABLE [dbo].[SysUser] ADD CONSTRAINT [IX_SysUser] UNIQUE NONCLUSTERED ( [Name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] GO
五、检查约束
检查约束用于指定列是否满足列的要求,比如年龄的数据不可以是负数下面使用图片演示添加检查约束
USE [ZhaoxiEdu] GO ALTER TABLE [dbo].[SysUser] WITH CHECK ADD CONSTRAINT [CK_SysUser] CHECK (([age]>(0))) GO ALTER TABLE [dbo].[SysUser] CHECK CONSTRAINT [CK_SysUser] GO