sql 约束语法- - JavaEye技术网站
SQL Server 2000支持下列五类约束:(1)DEFAULT约束(默认约束):当向数据库表中插入数据时,如果没有明确的提供输入值时,SQL S自动为该列输入指定值。(2)CHECK约束(检查约束):通过逻辑表达式判断限制插入到列中的值。(3)PRIMARY KEY约束(主键约束):不允许数据库表在指定列上具有相同的值,且不允许有空值。(4)FOREIGN KEY约束(外键约束):定义数据库表中指定列上插入或更新的数值必须在另一张被参照表中的特定列上存在。(5)UNIQUE约束(惟一约束):不允许数据库表在指定列上具有相同的值,但允许有空值。约束也被分为列约束和表约束两类。列约束是指只对某一列起作用的约束。当一个约束中包含了数据库表中一个以上的列时,称为表约束。

24、约束的创建    约束可以通过使用CREATE TABLE命令创建。    具体语法如下:    CREATE TABLE table_name    (column_name data_type (NULL | NOT NULL)[[CONSTRAINT constraint_name]{PRIMARY KEY [CLUSTERED | NONCLUSTERED] | UNIQUE [CLUSTERED | NONCLUSTERED] | [FOREIGN KEY] REFERENCES ref_table [(ref_column)] | DEFAULT constant_expression | CHECK(logical_expression)}][,...])        其中,各参数的意义为:    table_name:创建约束的表名称    column_name:创建约束的列的名称    data_type:所在列的数据类型    constraint_name:新建约束的名称

[例题37]    在tsinghua数据库中创建一张用于教师信息管理的表teachers,表中包括的教师信息分别为:教师编号、教师姓名、性别、出身年月、所在系代号、职称、办公室电话号码、科研方向以及工作状态,在创建时定义有列约束和表约束。    具体命令如下:    use tsinghua    CREATE TABLE tsinghua.dbo.teachers    (TeacherID int NOT NULL,     name nvarchar(5) NOT NULL,     gender nchar(1) NULL,     birthday datetime NULL,     DeptCode tinyint NOT NULL,     Title nvarchar(5) NULL,     TelCode char(8) NOT NULL,     aspect nvarchar(200) NULL,     status nvarchar(5) NOT NULL CONSTRAINT DF_Status DEFAULT('在职'),     CONSTRAINT PK_Teacher PRIMARY KEY CLUSTERED(TeacherID),     CONSTRAINT FK_DeptCode FOREIGN KEY (DeptCode)     REFERENCES dbo.departments(DeptCode),     CONSTRAINT CK_TelCode CHECK(TelCode LIKE '627[0-9][0-9][0-9][0-9][0-9]'),)    go        在这个例子中,用户可以看到我们使用的约束类型依次为非空约束、默认约束、主键约束、外键约束和检查约束。    在结果显示窗口中可以看到错误提示:

    服务器: 消息 1767,级别 16,状态 1,行 2    外键 'FK_DeptCode' 引用了无效的表 'dbo.departments'。    服务器: 消息 1750,级别 16,状态 1,行 2    未能创建约束。请参阅前面的错误信息。

    这是由于还没有在数据库tsinghua中创建外键约束FK_DeptCode所需表departments,用户可以通过下面指令先创建表departments:    CREATE TABLE tsinghua.dbo.departments    (DeptCode tinyint NOT NULL Primary Key,     DeptName nchar(20) NOT NULL,     TelCode char(8) NULL)     go

25、查看约束的定义信息    在CREATE TABLE语句中使用CONSTRAINT定义完整约束时,其约束命名必须在数据库中保持惟一,此外还应遵从SQL Server的标志符规则。    约束在创建后SQL Server将指导约束的名称保存在系统表sysobjects中,并把创建的文本代码保存在系统表syscomments中。SQL Server为用户提供了多种查看约束信息的方法。(1)使用系统存储过程    用户可以通过使用系统存储过程sp_help,sp_helptext,sp_helpconstraint来查看约束的相关信息。    具体命令的语法如下:    EXEC sp_help (sp_helptext,sp_helpconstraint)         其中:sonstraint_name为需要查看的约束的名称。

[例题38]    使用系统存储过程sp_helptext查看表teachers上约束CK_TelCode的定义文本信息。    具体命令如下:    use tsinghua    EXEC sp_helptext CK_TelCode    go(2)使用规划视图    用户还可以通过查询系统规划视图check_constraints,referential_constraints,table_constraints得到约束的相关信息。

[例题39]    使用系统规划视图check_constraints查看数据库tsinghua上存在的所有约束的相关信息。    具体命令如下:    use pubs    SELECT * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS    go    (3)使用“企业管理器”

26、删除约束    要删除定义在表上的各种约束,可以通过企业管理器或者利用系统函数实现。(1)利用“企业管理器”删除约束(2)利用系统函数drop删除约束    对于具有名称的完整性约束,利用系统函数drop也可以方便地实现约束的删除。其具体的命令如下:    ALTER TABLE table_name    DROP CONSTRAINT constraint_name

    其中:    table_name:需要删除约束的表的名称    constraint_name:需要删除的约束的名称

[例题40]    使用系统函数删除表teachers上定义的DF_status约束。具体命令如下:    use tsinghua    ALTER TABLE teachers    DROP CONSTRAINT DF_status    go

    用户不可以通过系统存储过程对约束的删除进行确认。在查询窗口运行如下命令:    EXEC sp_helpconstraint DF_status        返回信息告知:    服务器: 消息 15009,级别 16,状态 1,过程 sp_helpconstraint,行 46    对象 'DF_status' 在数据库 'tsinghua' 中不存在。

27、DEFAULT约束    DEFAULT约束(默认约束)强制了数据的域完整性。通过使用DEFAULT约束可以实现当用户在向数据库表中插入数据时,如果没有明确给出定义有DEFAULT约束列的输入值时,由SQL Server自动为该列输入默认值。定义DEFAULT约束可以在创建表时利用CREATE TABLE命令完成(关于在创建表时定义默认约束)也可以通过向已有表中添加约束实现。向已有表中添加DEFAULT约束的语法为:    ALTER TABLE table_name    ADD CONSTRAINT constraint_name DEFAULT default_value FOR column_name    [,...]

    其中:    table_name:需要增加默认约束的表的名称    constraint_name:需要增加的默认约束的名称    default_value:默认约束的默认值    column_name:表中需要增加默认约束的列的名称

[例题41]    恢复数据库tsinghua中表teachers上的DF_status约束,并在列Title上添加一个输入“未知”值的DEFAULT约束。    具体命令如下:    use tsinghua    ALTER TABLE teachers    ADD    CONSTRAINT DF_Status DEFAULT '在职' FOR status,    CONSTRAINT DF_Title DEFAULT '未知' FOR title    go

    在查询分析器窗口中运行上面的命令,在结果窗口中将返回如下运行结果信息:“命令已成功完成”。    用户在使用DEFAULT约束时,还应注意到如下事项:    创建DEFAULT约束时,SQL Server将对表中现有的数据进行数据完整性验证    表中的每一列上只能定义一个DEFAULT约束    DEFAULT约束只在执行INSERT语句时作用

28、CHECK约束    CHECK约束(检查约束)通过限制输入到列中的值来强制数据的域完整性。通过使用CHECK约束可以实现当用户在向数据库表中插入数据或更新数据时,由SQL Server检查新行中的带有CHECK约束的列值使其必须满足约束条件。定义CHECK约束可以在创建表时利用CREATE TABLE命令完成(关于在创建表时定义检查约束用户可以参考上一节的内容),也可以通过向已有表中添加约束实现。向已有表中添加CHECK约束的语法为:    ALTER TABLE table_name    ADD CONSTRAINT constraint_name CHECK (logical_expression)        [,...]        其中:    table_name:需要增加检查约束的表的名称    constraint_name:需要增加的检查约束的名称    logical_expression:检查约束的逻辑表达式

[例题42]    在数据库表teachers的列Birthday上添加一个CHECK约束,以保证输入数据大于1900年1月1日并且小于当天的实际日期。    具体命令如下:    use tsinghua    ALTER TABLE teachers    ADD    CONSTRAINT CK_Birthday CHECK(Birthday>'01/01/1900' AND Birthday

    下面通过向teachers表中插入不符合检查约束CK_Birthday的记录来检查该约束是否已被建立。    在查询分析器中运行如下命令插入新的一行记录:    INSERT Departments    values(10,'清华大学计算中心')    go    执行结果返回信息:        服务器: 消息 213,级别 16,状态 4,行 1    插入错误: 列名或所提供值的数目与表定义不匹配。

    在表Departments中插入数据是为了在向表teachers中插入数据时满足外键约束的需要。    INSERT teachers    values(41356,'黄轩','男','5/1/1851',20,'教授','62788888','规划部','在职')    go    在查询分析器的结果窗口将返回如下信息:

    服务器: 消息 547,级别 16,状态 1,行 1    INSERT 语句与 COLUMN CHECK 约束 'CK_Birthday' 冲突。该冲突发生于数据库 'tsinghua',表 'teachers', column 'birthday'。    语句已终止。

    从返回信息,可以看出由于新记录在列Birthday上不符合检查约束要求的逻辑条件,造成插入新记录失败,可见CK_Birthday约束已经被子成功建立,用户可以将上面记录的Birthday列的值改为5/1/1951,运行后将返回“命令已成功完成”。    根据CHECK约束是作用在单列还是多列,可以将其分为列级CHECK约束和表级CHECK约束。只作用在单列上的CHECK约束称之为列级CHECK约束,如上面建立的CK约束;作用在表中多列上的CHECK约束称之为表级CHECK约束,例如图书馆数据库中的借书记录表中,要求所有被借书归还日期必须大于借出日期,由于该CHECK约束涉及到表中的两列,所以属于表级约束。CHECK约束在执行INSERT语句或UPDATE语句时作用。

29、PRIMARY KEY约束    表中经常有一个列或列的组合,其值能惟一地标识表中的每一行。这样的一列或多列称为表的主键(Primary Key),通过它可强制表的实体完整性。一个表只能有一个PRIMARY KEY约束,而且PRIMARY KEY约束中的列不能接受空值。由于PRIMARY KEY约束能够确保数据的惟一性,所以经常用来定义标识列。当为表指定PRIMARY KEY约束时,SQL Server通过为主键列创建惟一索引强制数据的惟一性。当在查询中使用主键时,该索引还可用来对数据进行快速访问。如果PRIMARY KEY约束定义在不止一列上,则一列中的值可以重复,但PRIMARY KEY约束定义中的所有列的组合的值必须惟一。    定义PRIMARY KEY约束可以创建表时利用CREATE TABLE命令完成(关于在创建表时定义检查约束用户可以参考上一节的内容),也可以通过向已有表中添加约束实现。向已有表中添加PRIMARY KEY约束的语法为:    ALTER TABLE table_name    ADD CONSTRAINT constraint_name    PRIMARY KEY [CLUSTERED|NONCLUSTERED]{(column_name[,...])}    其中各参数的意义如下:    table_name:需要增加PRIMARY KEY约束的表的名称    constraint_name:需要增加的PRIMARY KEY约束的名称    CLUSTERED|NONCLUSTERED:指定在PRIMARY KEY约束所在列创建聚集索引(CLUSTERED)还是非聚集索引(NONCLUSTERED)。在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同,每张表只能包含一个聚集索引。在非聚集索引中,表中各行的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引有更快的数据访问速度。    column_name:需要建立PRIMARY KEY约束的所在列的列名

    下面举例说明如何在表中的多列上建立复合的PRIMARY KEY约束。

[例题43]    在数据库tsinghua中新建表Subjects以记录学校所有学科的数据。表中包括的学科信息分别为:一级学科代码、一级学科名称、二级学科代码、二级学科名称。在创建完后,向字段一级学科代码和二级学科代码上追加PRIMARY KEY约束。    具体命令如下:    use tsinghua    go    CREATE TABLE tsinghua.dbo.Subjects    (     PrimaryCode tinyint NOT NULL,     PrimaryName nvarchar(20) NULL,     SecondaryCode tinyint NOT NULL,     SecondaryName nvarchar(20) NULL    )    go    ALTER TABLE Subjects    ADD CONSTRAINT PK_Subjects    PRIMARY KEY CLUSTERED (PrimaryCode,SecondaryCode)    go

30、UNIQUE约束    UNIQUE约束(惟一约束)强制了数据的实体完整性。通过使用UNIQUE约束可以确保在非主键列中不输入重复值。在已经定义有PRIMARY KEY约束的表中,通过使用UNIQUE约束可以带来方便。与PRIMARY KEY约束相比,UNIQUE约束可以实现在一张表上定义多个UNIQUE约束,并且在定义有UNIQUE约束的列上允许有一个空值。此外用户也可以向PRIMARY KEY一样在单一指定列和多个指定列上创建惟一UNIQUE索引。    定义UNIQUE约束可以在创建表时利用CREATE TABLE命令完成,也可以通过向已有表中添加约束实现。向已有表中添加UNIQUE约束的语法为:    ALTER TABLE table_name    ADD CONSTRAINT constraint_name    UNIQUE [CLUSTERED|NONCLUSTERED]{(column_name[,...])}

    其中:    table_name:需要增加惟一约束的表的名称    constraint_name:需要增加的惟一约束的名称    column_name:表中需要增加惟一约束的单个或多个列的名称

[例题44]    在数据库中,在表上的列上添加一个UNIQUE约束。    具体命令如下:    use tsinghua    ALTER TABLE Departments    ADD    CONSTRAINT U_TelCode UNIQUE (TelCode)    go    31、FOREIGN KEY约束    FOREIGN KEY(外键)是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加另一个表中,可创建两个表之间的链接,这个列就成为第二个表的外键。使用FOREIGN KEY约束能够强制引用完整性。被FOREIGN KEY参照的列在表中应该具有PRIMARY KEY约束或UNIQUE约束。    定义FOREIGN KEY约束可以在创建表时利用CREATE TABLE命令完成,也可以通过向已有表中添加约束实现。向已有表中添加FOREIGN KEY约束的语法为:    ALTER TABLE table_name    ADD CONSTRAINT constraint_name    FOREIGN KEY {(column_name[,...])}    REFERENCES ref_table{(column_name[,...])}    [ON DELETE {CASCADE|NO ACTION}]    [ON UPDATE {CASCADE|NO ACTION}]

    其中:    table_name:需用增加FOREIGN KEY约束的表的名称    constraint_name:需要增加的FOREIGN KEY约束的名称    ref_table:被FOREIGN KEY约束参照的表的名称    column_name:需要建立FOREIGN KEY约束的所在列的列名或被参照的列的列名

    注意REFERENCES子句后的ON DELETE子句和ON UPDATE子句,在这些子句中执行CASCADE和NO ACTION选项。之所以设置这两个子句是因为考虑到当被FOREIGN KEY约束参考的列值发生改变时,是应将该改变自动传播到定义有FOREIGN KEY约束的列,还是自动产生错误并回滚该改变,所以把这两个选项称为级联参考选项。如果没有指定ON DELETE或ON UPDATE,则默认为NO ACTION,NO ACTION指定的行为与SQL Server的早期版本中发生的行为相同。下面介绍各选项进行组合的含义:    (1)ON DELETE NO ACTION    指定如果试图删除某行,而该行含有由其他表的现有行中的外键所引用的键,则产生错误并回滚DELETE。    (2)ON UPDATE NO ACTION    指定如果试图更新某行中的键值,而该行含有由其他表的现有行中的外键所引用的键,则产生错误并回滚UPDATE。CASCADE允许在表间级联键值的删除或更新操作,这些表的外键关系可追溯到执行修改的表。不能为任何具有timestamp列的外键和主键指定CASCADE。    (3)ON DELETE CASCADE    指定如果试图删除某行,而该行含有由其他表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。    (4)ON UPDATE CASCADE    指定如果试图更新某行中的键值,而该行的键值由其他表的现有行中的外键所引用,则所有外键值也将更新成为该键指定的新值。如果在目标表上也定义了级联引用操作,则对在那些表中更新的键值同样采取指定的级联操作。    关于FOREIGN KEY约束的级联参考选项的使用,用户可以参考数据库Northwind中Products表上定义的FK_Products_Suppliers 约束。该约束建立了从Products表中的SupplierID列到Suppliers表中定义有PRIMARY KEY约束的SupplierID列的外键关系。用户如果为该约束指定了ON DELETE CASCADE选项,则删除Suppliers表中SupplierID=1的行时,也将删除SupplierID=1的Products表中的三行;如果为该约束指定了ON DELETE NO ACTION选项,则删除Suppliers表中SupplierID=1的行时将产生错误信息,并回滚DELETE操作;如果为该约束指定了ON UPDATE CASCADE选项,则更新Suppliers表中从1到55的SupplierID值也将更新Products表中SupplierID值当前等于1的三行的SupplierID值;如果为该约束指定了ON UPDATE NO ACTION选项,则更新Suppliers表中从1到55的SupplierID值也将更新Products表中SupplierID值当前等于1的三行的SupplierID值。    此外,用户在使用FOREIGN KEY约束时,还应注意到如下事项:    1、在FOREIGN KEY语句中指定的列数和数据类型必须和在REFERENCES子句中的列数和数据类型相匹配。    2、在同一张表中相互参照时,可以使用没有FOREIGN KEY子句的REFERENCE子句。

32、使用WITH NOCHECK选项    当需要在一个已经存在大量数据的表上定义约束时,SQL Server将自动检验存在数据以证明它们满足约束的要求。此时,用户可以通过使用“WITH NOCHECK”选项来禁止SQL Server对现有数据的约束检查。    并不是所有约束都可以通过设置“WITH NOCHECK”选项禁止纸检查。能禁止约束检查的只有CHECK和FOREIGN KEY约束。值得注意的是,在使用“WITH NOCHECK”时用户应该确信对现有数据禁止约束检查是合理的。使用“WITH NOCHECK”选项的命令如下:    ALTER TABLE table_name    WITH NOCHECK    ADD CONSTRAINT constraint_name    [CHECK(logical_expression)]    [FOREIGN KEY (column_name[,...])     REFERENCES reftable_name (refcol_name[,...])]    其中各参数的意义与前面的参数意义都一样。

[例题45]    假设数据库tsinghua表Departments中已经存在大量记录,需要在列上添加一个CHECK约束,以保证所有电话号码都以数字6278开头。    具体命令如下:    use tsinghua    ALTER TABLE Departments WITH NOCHECK    ADD    CONSTRAINT CK_Dept_TelCode CHECK(TelCode LIKE '6278[0-9][0-9][0-9][0-9]')    go

33、使用NOCHECK选项    当需要向在一张定义有约束的表中插入新记录或修改记录时,SQL Server将自动检验新数据以确定它们满足表上约束的要求。此时,可以通过使用“NOCHECK”选项来禁止SQL Server对新数据的约束检查。    并不是所有约束都可以通过设置“NOCHECK”选项来禁止SQL Server检查新数据。能禁止亲数据检查的也只有CHECK和FOREIGN KEY约束。值得注意的是在使用“NOCHECK”时,用户应该确信插入的新记录或修改后的新记录符合表中现有约束。用户在给约束设置“NOCHECK”选项后,可以通过给约束再次设置“CHECK”选项使得SQL Server恢复对载入数据的约束检查。使用“NOCHECK”选项的命令如下:    ALTER TABLE table_name    [CHECK|NOCHECK]    CONSTRAINT {ALL|constraint_name[,...]}        其中各参数的意义与前面的参数意义都一样。

[例题46]    设置数据库表teachers中约束FK_DeptCode的NOCHECK选项,使用SQL Server对即将插入的大量数据不做FK_DeptCode的约束检查。    具体命令如下:    use tsinghua    ALTER TABLE teachers NOCHECK    CONSTRAINT FK_DeptCode    go    34、使用默认    声明数据完整性可以使用约束、默认和规则实现。    与在约束中介绍的DEFAULT约束一样,使用默认也可以实现当用户在向数据库表中插入一行数据时,如果没有明确给出某列的输入值时,则由SQL Server自动为该列输入默认值。但与DEFAULT约束不同的是,默认是一种数据库对象,在数据库中只需定义一次后,就可以被一次或多次应用于任意表中的一列或多列,还可以用于用户定义的数据类型。    创建默认的命令如下:    CREATE DEFAULT default_name    AS constant_expression

    其中:    default_name:新建立的默认的名称,应遵从SQL Server的命令规则    constant_expression:指定默认的常数值

    在默认被创建后,用户必须通过执行系统存储过程sp_bindefault将其定于列或用户自定义的数据类型上,从而将默认用于数据库中任意表的一列或多列,以及用于用户自定义的数据类型,执行默认绑定的命令如下:    EXEC sp_bindefault default_name    'table_name.[column_name[,...]|user_datetype]'    [例题47]    在数据库tsinghua上创建默认DeptCode_default,并将其绑定在数据库表Departments中的DeptCode列上,从而实现各系默认电话为62780001(校总机)。    具体命令如下:    use tsinghua    go    CREATE DEFAULT DeptCode_default    AS '62780001'    go    EXEC sp_bindefault DeptCode_default,'Departments.DeptCode'    go

    返回信息:    已将默认值绑定到列。

    用户也可以通过执行系统存储过程sp_unbindefault的命令来达到同样的操作,实现该功能的语法如下:    EXEC sp_unbindefault default_name    'table_name.[column_name[,...]|user_datetype]'        如果用户需要删除数据库中定义的默认,可以通过“企业管理器”或使用DROP DEFAULT语句实现。使用“企业管理器”时, 用户只需选中需要删除的默认,按鼠标右键,从弹出的菜单中选择“删除”即可完成工作,使用DROP DEFAULT删除默认时,命令语法如下:    DROP DEFAULT default_name[,...]

    其中,default_name为需要删除的默认的名称。    使用默认时,用户还应注意到如下事项:    1、绑定在列上的默认必须符合该列的数据类型和列上存在的CHECK约束    2、不能在用户自定义的数据类型所在列创建默认

35、使用规则    通过使用规则,用户要可以指定插入数据库表上列中的有效值,从而确保数据在指定的取值范围内,并与特定的模式或特定数据库表中实体匹配。规则也是一种数据库对象。因此和默认一样在数据库中只需定义一次,就可以被一次或多次应用于任意表中的一列或多列,也可以用于用户定义的数据类型。    创建默认的命令如下:    CREATE RULE rule_name    AS condition_expression        其中:    rule_name:新建立的规则的名称应遵从SQL Server的命名规则    condition_expression:是定义规则的条件。规则可以是WHERE子句中有任何有效的表达式,并且可以包含诸如算术运算符、关系运算符和谓词(如IN、LIKE、BETWEEN)之类的元素。规则不能引用列或其他数据库对象。可以包含不引用数据库对象的内置函数。condition expression包含一个变量。每个局部变量的前面都有一个@符号。该表达式引用通过UPDATE 或者 INSERT语句输入的值。    在创建规则时,可以使用任何名称或符号表示值,但{dy}个字符必须是@符号,在规则被创建后,用户必须通过执行系统存储过程sp_bindrule将其绑定于列或用户自定义的数据类型上,从而将规则用于数据库中任意表的一列或多列,以及用于用户自定义的数据类型,执行规则绑定的命令如下:    EXEC sp_bindrule rule_name,    'table_name.[column_name[,...]|user_datetype]'

[例题48]    在数据库tsinghua上创建规则Code_rule,并将其绑定在数据库表stud_info中的stud_id列上,从而使学生标识号stud_id为1到50的自然数(包含1到50)。具体命令如下:    use tsinghua    go    CREATE RULE Code_rule    AS @stud_id>=1 AND @stud_id<=50    go    EXEC sp_bindrule Code_rule,'stud_info.stud_id'    go        在表中的某列上绑定了规则后,如果用户想从该列上删除规则只需执行系统存储过程sp_unbindrule。    执行系统存储过程sp_unbindrule的命令语法如下:    EXEC sp_unbindrule rule_name,    'table_name.[column_name[,...]|user_datetype]'

    使用DROP RULE语句删除规则时,命令语法如下:    DROP RULE rule_name[,...]

    其中,rule_name为需要删除的规则的名称。    使用规则时,用户还应注意到如下事项:    1、默认情况下,SQL Server将对在创建和绑定规则之前数据库表中存在的数据进行检查。    2、在一个列上至多有一个规则起作用,如果有多个规则与一列相绑定,那么只有{zh1}绑定到该列的规则有效。

                           表: 数据完整性方法、功能及效果实现方法                                  实现效果                                           实现功能                 性能开销约束                    定义表有效的数据,在事务处理前执行,有较好的性能                       中等                      低默认和规则              提供独立的可以与多个表联系的对象实现数据完整性,在事务处理前执行       低                        低数据类型,空/非空约束   提供{zdj0}别的数据完整性,在表创建时实现,在事务处理开始前执行         低                        低

此外,就声明数据完整性与过程定义完整性的选择,应当遵循以下两点:1、对于基础的完整性逻辑,应该采用声明数据完整性2、如果要维护复杂而全面的完整性逻辑,应该采用过程定义数据完整性
{zx1}评论

  • mpl398235717 ,您好!不知道您测试出现了什么问题,我在控制台输入数字准 ...
    -- by

  • 垃圾程序 你测试过了没
    -- by

  • 要使用参数的形式,必须给你的报表配置参数 public void publicMe ...
    -- by

  • 终于通过测试了... 呵呵,我们在使用ireport时会使用variables,p ...
    -- by

  • 请问一下,我这个静态文本中传递的参数怎么不显示: <staticText&g ...
    -- by
郑重声明:资讯 【sql 约束语法- - JavaEye技术网站】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——