加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 云上网络、混合云网络、数据仓库、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server约束有几类

发布时间:2023-12-31 07:21:25 所属栏目:MsSql教程 来源:DaWei
导读: 这篇文章主要讲解了“SQL Server约束有几类,约束命名规则有什么”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获
这篇文章主要讲解了“SQL Server约束有几类,约束命名规则有什么”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

一、约束的分类
在SQL Server中,有3种不同类型的约束。
实体约束
实体约束是关于行的,比如某一行出现的值就不允许出现在其他行,例如主键。
域约束
域约束是关于列的,对于所有行,某一列有那些约束,例如CHECK约束。
参照完整性约束
如果某列的值必须与其他列的值匹配,那就意味着需要一个参照完整性约束,例如外键。

二、约束命名
在学习约束之前,首先来了解下为约束命名需要注意哪些地方。

SQL Server在我们不提供名称时,会自动创建名称,但是由系统自动创建的名称并不是特别有用。

例如,系统生成的主键名称可能是这样的:PK_Employees_145C0A3F。

PK代表主键(primary key),Employees代表在Employees表中,而剩下的“145C0A3F”部分是为了保证唯一性而随机生成的值。只有通过脚本创建才会得到这种值,如果是通过Managerment Studio创建表,那么就直接是PK_Employees。

对于系统自动生成的Check约束名称如:CK_Customers_22AA2996。CK代表这是一个Check约束,Customers代表是在Customers表中,后面的22AA2996还是一个随机数。如果一个表中有多个Check约束,则命名可能如下:

CK_Customers_22AA2996

CK_Customers_25869641

CK_Customers_267ABA7A

如果你需要修改这些约束其中的一个,那么你很难分辨这些约束到底是哪一个。

因此,为了能够一眼看上去就知道这个约束是用来干什么的,我们应该使用一种简单明了的短语来进行命名。

例如要确保某一列电话号码格式正确的约束,我们可以使用命名CK_Customers_PhoneNo这样的短语来命名。

总之命名要做到以下几点:
一致性
通俗易懂
满足以上两个条件的情况下简化名称。

三、主键约束
主键是每行的唯一标识符,仅仅通过它就能准确定位到一行,其中主键列在整个表中不能有重复,必须包含唯一的值(不能为NULL)。由于主键在关系数据库中的重要性,因此它是所有键和约束中最重要的。

下面来说说主键的创建方式

1、在创建表的时候创建主键约束。
create table customer
(
    customerId        int identity    not null  primary key,--创建主键约束
    CustomerName    nvarchar(30)    not null
);

2、在已存在的表上创建主键约束

现在假设已经存在了一张表,但是还没有主键约束:
alter table person
    add constraint PK_Employee_Id--外键名称
    primary key(personId)--personId 字段名
    
alter名称告诉SQL Server如下信息:
添加了一些内容到表中(也可以删除表中的某些内容)
添加了什么内容(一个约束)
对约束的命名(允许以后直接访问约束)
约束的类型(主键约束)
约束应用于哪个列。

3、复合主键的创建

如果实在Management Studio中,创建复合主键,只需要按住Ctrl键,选中两个列,然后设置为主键就OK了,非常简单。下面主要讲述使用T-SQL创建复合主键的方法:
ALTER TABLE 表名 WITH NOCHECK 
ADD CONSTRAINT [PK_表名] 
PRIMARY KEY NONCLUSTERED ( [字段名1], [字段名2] )

在多对多联系中,常常会有一张表来描述其他两张表的关系,就以此读者和书为例子:
ALTER TABLE ReaderAndBook 
ADD CONSTRAINT [PK_ReaderAndBook] 
PRIMARY KEY NONCLUSTERED ( ReaderId, BookId )

四、唯一约束
唯一约束与主键比较相似,共同点在于它们都要求表中指定的列(或者列的组合)上有一个唯一值,区别是唯一约束没有被看作表中记录的唯一标识符(即使你可以按这样的方式使用也有效),而且可以有多个唯一约束(而在每个表中只能有一个主键)。

一旦建立了唯一约束,那么指定列中的每个值必须是唯一的。如果更新或者插入一条记录在带唯一约束的列上有已经存在的值的记录,SQL Server将抛出错误,拒绝这个记录。

和主键不同,唯一约束不会自动防止设置一个NULL值,是否允许为NULL由表中相应列的NULL选项的设置决定,但即使确实允许NULL值,一张表中也只能够插入一个NULL值(如果允许多个,那就不叫唯一了)。

在已存在的表上创建唯一约束:
alter table Account
    add constraint AK_AccountName    --约束名
    unique (Account_Name)    -- 列名
AK代表替换键(Alternate Key),唯一约束也叫替换键。

主键和唯一约束的区别:
    主键约束不允许出现NULL值。任何索引的索引键都不允许包含null值。但唯一约束允许包含NULL值,但唯一约束把两个NULL值当作重复值,所以施加了唯一约束的每一列只允许包含一个NULL值。
    创建主键时会自动创建聚集索引,除非当前表中已经含有了聚集索引或是创建主键时指定了NONCLUSTERED关键字。
    创建唯一约束时会自动创建非聚集索引,除非你指定了CLUSTERED关键字并且当前表中还没有聚集索引。
    每个表中只能有一个主键,但可以由多个唯一约束。

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章