问题补充说明:意不是增加一个非空列.我写的use xhglgoalter table s1add constraint NO_sdept not null (sdept)提示not 附近有语法错误,是对表中已有的字段的非空约束,请指教了
五大约束
1.—-主键约束(PrimayKe360问答yCoustraint)唯一性,非空性
2.—-唯一约束(UniqueCounstraint)唯一性,可以空,但只能有一个
3.—-检查约束(CheckCounstraint)对该列数据的范围、格式的限制(如:年龄、性别等)
4.—-默认约束(DefaultCounstraint)该数据的默认值
5.—-外键约束(ForeignKeyCounstraint)需要建立两表间的关系并引用主表的列五大约束的语法示例
1.—-添加主键约束(将stuNo作为主键)
altertablestuInfo
addconstraintP从敌义明评田答矿办决区K_stuNoprimarykey(stuNo)
2.—-添加唯一约束(身份证号唯一,因为每个人的都不一样)
al七红河固剂说苗附草边tertablestuInfo
addconstraintU晚Q_stuIDunique(stuID)
3.—-添加默认约束(如果地址不填默认为“地址不详倒还季据”)
altertablestuInfo
addconstraintDF_stuAddres头势安引处沿果sdefault(‘地址不详’)forstuAddress
觉导功则维很期须的4.—-添加检查约束(对年龄加以限定15换导事希倍-40岁之间)
altertablestuInfo
addconstraintCK_stuAgecheck(stuAgebetween15and40)
altertablestuInfo
addconstraintCK_stuSexcheck(stuS殖改记条均治茶界离境么ex=’男’orstuSex=’女′)
5.—-添加外键约束(主表stuInfo和从表stuMarks建立关系,关联字段stuNo)
altertable示stuInfo
addconst钱raintFK_stuNoforeignkey(stuNo)referencesstuinfo(stuNo)
约束(Constraint)是MicrosoftSQLServer提供的片苏写越自动保持数据库完整性后失议世染显的一种方法,定义了可输入员事代拿太谁收和远易据表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9章)。在SQ利夫房四异孔齐卫身点LServer中有5种约束:主关键字约束(Pri集尔岩育由展乱派脱致获maryKeyConstrai待输若约零危算nt)、外关键字约束答范亲(ForeignKeyConstraint)、惟一性约束(UniqueConstraint粉善)、检查约束(CheckConstraint)和缺省约束(DefaultConstraint)。
1主关键字约束
主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE和TEXT类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL属性。
定义主关键字约束的语法如下:
CONSTRAINTconstraint_name
PRIMARYKEY[CLUSTERED|NONCLUSTERED]
(column_name1[,column_name2,…,column_name16])
各参数说明如下:
constraint_name
指定约束的名称约束的名称。在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。
CLUSTERED|NONCLUSTERED
指定索引类别,CLUSTERED为缺省值。其具体信息请参见下一章。
column_name
指定组成主关键字的列名。主关键字最多由16个列组成。
例7-3:创建一个产品信息表,以产品编号和名称为主关键字
createtableproducts(
p_idchar(8)notnull,
p_namechar(10)notnull,
pricemoneydefault0.01,
quantitysmallintnull,
constraintpk_p_idprimarykey(p_id,p_name)
)on[primary]
2外关键字约束
外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。这样,当在定义主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新。外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据。与主关键字相同,不能使用一个定义为TEXT或IMAGE数据类型的列创建外关键字。外关键字最多由16个列组成。
定义外关键字约束的语法如下:
CONSTRAINTconstraint_name
FOREIGNKEY(column_name1[,column_name2,…,column_name16])
REFERENCESref_table[(ref_column1[,ref_column2,…,ref_column16])]
[ONDELETE{CASCADE|NOACTION}]
[ONUPDATE{CASCADE|NOACTION}]]
[NOTFORREPLICATION]
各参数说明如下:
REFERENCES
指定要建立关联的表的信息。
ref_table
指定要建立关联的表的名称。
ref_column
指定要建立关联的表中的相关列的名称。
ONDELETE{CASCADE|NOACTION}
指定在删除表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在删除父表数据行时会将子表中对应的数据行删除;如果指定的是NOACTION,则SQLServer会产生一个错误,并将父表中的删除操作回滚。NOACTION是缺省值。
ONUPDATE{CASCADE|NOACTION}
指定在更新表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在更新父表数据行时会将子表中对应的数据行更新;如果指定的是NOACTION,则SQLServer会产生一个错误,并将父表中的更新操作回滚。NOACTION是缺省值。
NOTFORREPLICATION
指定列的外关键字约束在把从其它表中复制的数据插入到表中时不发生作用。
例7-4:创建一个订货表,与前面创建的产品表相关联
createtableorders(
order_idchar(8),
p_idchar(8),
p_namechar(10),
constraintpk_order_idprimarykey(order_id),
foreignkey(p_id,p_name)referencesproducts(p_id,p_name)
)on[primary]
注意:临时表不能指定外关键字约束。
惟一性约束
惟一性约束指定一个或多个列的组合的值具有惟一性,以防止在列中输入重复的值。惟一性约束指定的列可以有NULL属性。由于主关键字值是具有惟一性的,因此主关键字列不能再设定惟一性约束。惟一性约束最多由16个列组成。
定义惟一性约束的语法如下:
CONSTRAINTconstraint_name
UNIQUE[CLUSTERED|NONCLUSTERED]
(column_name1[,column_name2,…,column_name16])
例7-5:定义一个员工信息表,其中员工的身份证号具有惟一性。
createtableemployees(
emp_idchar(8),
emp_namechar(10),
emp_cardidchar(18),
constraintpk_emp_idprimarykey(emp_id),
constraintuk_emp_cardidunique(emp_cardid)
)on[primary]
7.2.4检查约束
检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。可以对每个列设置符合检查。
定义检查约束的语法如下:
CONSTRAINTconstraint_name
CHECK[NOTFORREPLICATION]
(logical_expression)
各参数说明如下:
NOTFORREPLICATION
指定检查约束在把从其它表中复制的数据插入到表中时不发生作用。
logical_expression
指定逻辑条件表达式返回值为TRUE或FALSE。
例7-6:创建一个订货表其中定货量必须不小于10。
createtableorders(
order_idchar(8),
p_idchar(8),
p_namechar(10),
quantitysmallint,
constraintpk_order_idprimarykey(order_id),
constraintchk_quantitycheck(quantity>=10),
)on[primary]
注意:对计算列不能作除检查约束外的任何约束。
7.2.5缺省约束
缺省约束通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值。SQLServer推荐使用缺省约束,而不使用定义缺省值的方式来指定列的缺省值。有关绑定缺省约束的方法请参见“数据完整性”章节。
定义缺省约束的语法如下:
CONSTRAINTconstraint_name
DEFAULTconstant_expression[FORcolumn_name]
例7-7:
constraintde_order_quantitydefault100fororder_quantity
注意:不能在创建表时定义缺省约束,只能向已经创建好的表中添加缺省约束。
7.2.6列约束和表约束
对于数据库来说,约束又分为列约束(ColumnConstraint)和表约束(TableConstraint)。
列约束作为列定义的一部分只作用于此列本身。表约束作为表定义的一部分,可以作用于
多个列。
下面举例说明列约束与表约束的区别。
例7-8:
createtableproducts(
p_idchar(8),
p_namechar(10),
pricemoneydefault0.01,
quantitysmallintcheck(quantity>=10),/*列约束*/
constraintpk_p_idprimarykey(p_id,p_name)/*表约束*/