mssql sqlserver constraint mssql是sqlserver
在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。
1 主关键字约束主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。定义主关键字约束的语法如下: CONSTRAINT constraint_name PRIMARY KEY [CLUSTERED | NONCLUSTERED] (column_name1[, column_name2,…,column_name16])各参数说明如下:
constraint_name 指定约束的名称约束的名称。在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。 CLUSTERED | NONCLUSTERED 指定索引类别,CLUSTERED 为缺省值。其具体信息请参见下一章。 column_name 指定组成主关键字的列名。主关键字最多由16 个列组成。
如: 创建一个产品信息表,以产品编号和名称为主关键字 create table products ( p_id char(8) not null, p_name char(10) not null , price money default 0.01 , quantity smallint null , constraint pk_p_id primary key (p_id, p_name) ) on [primary]
2:外关键字约束外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和
其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合
哪个表中哪些列相关联。这样,当在定义主关键字约束的表中更新列值,时其它表中有与之相
关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新。外关键字约束的作用还
体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字
列值相同的值时,系统会拒绝插入数据。与主关键字相同,不能使用一个定义为 TEXT 或
IMAGE 数据类型的列创建外关键字。外关键字最多由16 个列组成。定义外关键字约束的语法
如下: CONSTRAINT constraint_name FOREIGN KEY (column_name1[, column_name2,…,column_name16]) REFERENCES ref_table [ (ref_column1[,ref_column2,…, ref_column16] )] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] ] [ NOT FOR REPLICATION ] 各参数说明如下:
REFERENCES 指定要建立关联的表的信息。 ref_table 指定要建立关联的表的名称。
ref_column 指定要建立关联的表中的相关列的名称。 ON DELETE {CASCADE | NO ACTION} 指
定在删除表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相
关联的情况下,如果指定了值CASCADE,则在删除父表数据行时会将子表中对应的数据行删
除;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的删除操作回滚。
NO ACTION 是缺省值。 ON UPDATE {CASCADE | NO ACTION} 指定在更新表中数据时,对关联
表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值
CASCADE,则在更新父表数据行时会将子表中对应的数据行更新;如果指定的是NO ACTION,则S
QL Server 会产生一个错误,并将父表中的更新操作回滚。NO ACTION 是缺省值。 NOT FOR
REPLICATION 指定列的外关键字约束在把从其它表中复制的数据插入到表中时不发生作用。
如:创建一个订货表,与前面创建的产品表相关联 create table orders( order_id char(8), p_id char(8), p_name char(10) , constraint pk_order_id primary key (order_id) , foreign key(p_id, p_name) references products(p_id, p_name) ) on [primary] 注意:临时表不能指定外关键字约束。
3 惟一性约束惟一性约束指定一个或多个列的组合的值具有惟一性,以防止在列中输入重复的值。惟一性约束指定的列可以有NULL 属性。由于主关键字值是具有惟一性的,因此主关键字列不能再设定惟一性约束。惟一性约束最多由16 个列组成。定义惟一性约束的语法如下: CONSTRAINT constraint_name UNIQUE [CLUSTERED | NONCLUSTERED] (column_name1[, column_name2,…,column_name16])
如:定义一个员工信息表,其中员工的身份证号具有惟一性。 create table employees ( emp_id char(8), emp_name char(10) , emp_cardid char(18), constraint pk_emp_id primary key (emp_id), constraint uk_emp_cardid unique (emp_cardid) ) on [primary]
4: 检查约束检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。可以对每个列设置符合检查。定义检查约束的语法如下: CONSTRAINT constraint_name CHECK [NOT FOR REPLICATION] (logical_expression) 各参数说明如下: NOT FOR REPLICATION 指定检查约束在把从其它表中复制的数据插入到表中时不发生作用。 logical_expression 指定逻辑条件表达式返回值为TRUE 或FALSE。
如: 创建一个订货表其中定货量必须不小于10。 create table orders( order_id char(8), p_id char(8), p_name char(10) , quantity smallint, constraint pk_order_id primary key (order_id), constraint chk_quantity check (quantity>=10) , ) on [primary] 注意:对计算列不能作除检查约束外的任何约束。
5 缺省约束缺省约束通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值。SQL Server 推荐使用缺省约束,而不使用定义缺省值的方式来指定列的缺省值。
定义缺省约束的语法如下: CONSTRAINT constraint_name DEFAULT constant_expression [FOR column_name]
如: constraint de_order_quantity default 100 for order_quantity 注意:不能在创建表时定义缺省约束,只能向已经创建好的表中添加缺省约束。
6 列约束和表约束对于数据库来说,约束又分为列约束(Column Constraint)和表约束(Table Constraint)。列约束作为列定义的一部分只作用于此列本身。表约束作为表定义的一部分,可以作用于多个列。下面举例说明列约束与表约束的区别。
如: create table products ( p_id char(8) , p_name char(10) , price money default 0.01 , quantity smallint check (quantity>=10) , /* 列约束 */ constraint pk_p_id primary key (p_id, p_name) /* 表约束 */
更多阅读
SQLServer数据库备份和还原的学习
SQLServer2005的数据库恢复模式分为3种:完整恢复模式、简单恢复模式、大容量日志恢复模式。◆完整恢复模式。为默认恢复模式。它会完整记录下操作数据库的每一个步骤。使用完整恢复模式可以将整个数据库恢复到一个特定的时间点,这个时
oracle和sqlserver取第一条记录的区别以及rownum详解转 oracle rownum 1
我们知道学生可能有重名的情况,那么当重名的时候假设只需要取得重名结果集中的第一条记录。sqlserver:select top(1) num,Name from M_Student wherename = 'xy'Oracle:select num,Namefrom M_Student where name = 'xy' and rownum
sqlserver游标 sqlserver官方文档
1、需要游标的数据操作当select语句的结果中包含多个元组时,使用游标可以逐个存取这些元组活动集:select语句返回的元组的集合当前行:活动集中当前处理的那一行。游标即是指向当前行的指针。2、游标分类滚动游标:游标的位置可以来
SQLServer——DataReader对象 sqlserver对象名无效
DataReader是一个简单的数据集,用于从数据源中检索只读、只向前数据流。数据流是为缓冲的,所以在检索大量数据时,DataReader是明智的选择。DataReader对象是通过Command对象的ExecuteReader方法从数据源中检索行创建。DataReader 有re
SQLServer触发器创建、删除、修改、查看示例步骤-十年如一-博客园 sqlserver 触发器
一﹕触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约`束。二﹕ SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted