全面掌握MS ACCESS SQL(10)-Big Young
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-查询/SQL语句


全面掌握MS ACCESS SQL(10)

发表时间:2018/1/4 11:40:49 评论(0) 浏览(3950)  评论 | 加入收藏 | 复制
   
摘 要:  CONSTRAINT子句的用法。
正 文:

第五节 SQL中的CONSTRAINT子句

    CONSTRAINT指限制或约束的意思,使用CONSTRAINT子句可以为表中的字段创建一个或多个约束条件,当然约束也能被用于建立与另一个表的关联。用Alter TABLECreate TABLE语句中的CONSTRAINT子句来建立或删除条件。CONSTRAINT子句可分为两种类型:第一种是在单一字段上创建条件;第二种是在一个以上的字段上创建条件。

    在数据库中使用约束(CONSTRAINT)是为了在该数据库中实施所谓的“业务规则,其实就是防止非法信息进入数据库,满足管理员和应用开发人员所定义的规则集。约束是通过使用Create TABLEAlter TABLE语句生成的(建立表时或者表建立后修改都可),如果相关的约束定义在单列上,可以在列这一级指定约束的定义;多列约束必须定义在数据表级,相关的列要在括号中指定,用逗号分隔。如果没有为约束提供一个名字,那么ACCESS会分配一个系统生成的唯一标识,你可以使用关键字CONSTRAINTS后面跟随相关的约束名字来为约束指定名字。

可以在Alter TABLECreate TABLE语句中使用CONSTRAINT子句来创建或删除约束。有两种类型的CONSTRAINT子句:一个用于创建单字段的约束,另外一个用于创建多字段的约束。

    一、添加字段约束的CONSTRAINT子句语法

    1、单字段约束语法:

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL | REFERENCES foreigntable [(foreignfield1, foreignfield2)] [ON Update CASCADE | SET NULL] [ON Delete CASCADE | SET NULL]}

2、多字段约束语法:

CONSTRAINT name {PRIMARY KEY (primary1[, primary2 [, ...]]) | UNIQUE (unique1[, unique2 [, ...]]) | NOT NULL (notnull1[, notnull2 [, ...]]) | FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])] [ON Update CASCADE | SET NULL] [ON Delete CASCADE | SET NULL]}

3CONSTRAINT子句包含部分说明:

部分

说明

Name

要创建的约束的名称。

primary1primary2

要指定为主键的字段的名称。

unique1unique2

要指定为唯一键的字段的名称。

notnull1notnull2

限制为非Null值的字段的名称。

ref1ref2

引用另一个表中的字段的外键字段的名称。

Foreigntable

包含了由foreignfield所指定的字段的外表的名称。

foreignfield1foreignfield2

ref1ref2指定foreigntable中的字段的名称。如果所引用字段是foreigntable的主键,可以忽略这个子句。

    Alter TABLECreate TABLE语句的字段定义子句中,在紧随字段数据类型指定之后,可以将该语法用于单字段约束。任何时候,只要在Alter TABLECreate TABLE语句中的字段定义子句以外使用保留字CONSTRAINT,就可以将该语法用于多字段约束。

    从上面的语法结构中我们可以看出,用CONSTRAINT子句可以创建多种约束,下面分别来说明其具体用法。

    二、创建UNIQUE(唯一性)约束

    ACCESS中可以使用SQLUNIQUE保留字将字段指定为唯一键。这意味着表中任意两个记录在此字段中的值都不相同。可将任何字段或字段列表约束为唯一键。如果将多字段约束指定为唯一键,则索引中所有字段的组合值必须是唯一的,即使两个或更多记录只有一个相同的字段值。

    1、在单一字段上添加UNIQUE(唯一性)约束

    在实际的操作中,有两种方式来创建唯一键,一种是在Create TABLE(创建表)语句中直接用UNIQUE来创建由系统随机命名的唯一键,另一种是在CONSTRAINT子句中用UNIQUE来定义用户命名的唯一键。如下代码所示:

Create TABLE 人员

(

  编号 int NOT NULL UNIQUE,

  姓名 varchar(8) NOT NULL,

  住址 varchar(50),

  电话 varchar(11),

  CONSTRAINT 电话唯一 UNIQUE (电话)

);

    如果表已经存在,还可以用Alter TABLE语句带CONSTRAINT子句来修改表结构,添加UNIQUE约束。例如数据库中有一个名为“STUDENTS”的表,表中有一个名为“ROLL_NO”的字段,现在要为其添加唯一性约束,并把约束命名为“UQ_ROLL_NO”,我们可以用以下代码来完成这一任务:

Alter TABLE STUDENTS

ADD CONSTRAINT UQ_ROLL_NO UNIQUE (ROLL_NO);

    2、在多个字段的组合上创建唯一性约束

    有时候,单一一个字段无法区分唯一的记录,需要多个字段的组合来完成唯一性的区分,这就需要在多字段组合上创建唯一键约束,这样一条记录的多个字段的组合与另一条记录的相同多个字段的组合值互不相同构成唯一。例如,我们用“Create TABLE 学生 (学号     TEXT(6), 姓名 VARCHAR (5), 性别 VARCHAR (1), 出生日期 DATETIME, 电话 TEXT (11));”语句已创建了一个名为学生的表,我们现在要为其增加一个多字段组合的且名为组合唯一的唯一性约束,示例代码如下:

Alter TABLE 学生

ADD CONSTRAINT 组合唯一 UNIQUE (姓名, 性别, 出生日期);

    三、创建PRIMARY KEY(主键)约束

    可使用PRIMARY KEY系统保留字将表中的一个或一组字段指定为主键。主键中的所有值都必须是唯一的,并且不为NULL值,一个表只能有一个主键。注意:请勿对已有主键的表设置PRIMARY KEY约束;这样做会出现错误。

    1、在创建表时就创建PRIMARY KEY(主键)约束

    在创建表时我们可以用Create TABLE语句带上CONSTRAINT子句及PRIMARY KEY关键字的SQL语句来实现创建表的同时也创建主键。下面的SQL语句在“人员”表创建时在“编号列上创建PRIMARY KEY约束:

Create TABLE 人员

(

  编号 int PRIMARY KEY,

  姓名 varchar(25) NOT NULL,

  性别 varchar(5),

  住址 varchar(55),

  国籍 varchar(50)

) ;

    上面这种方式创建一个由系统随机分配名字的主键,如果需要自命名PRIMARY KEY约束,以及为多个列定义PRIMARY KEY约束,就必须使用下面的SQL语法:

Create TABLE 人员

(

  编号 int,

  姓名 varchar(25) NOT NULL,

  性别 varchar(5),

  住址 varchar(55),

  国籍 varchar(50),

  CONSTRAINT pk_人员 PRIMARY KEY (编号,姓名,性别,住址)

);

    2、通过修改表来添加PRIMARY KEY约束

如果是在“人员表已存在的情况下要为“编号列创建PRIMARY KEY约束,就要使用下面的SQL语句:

Alter TABLE 人员

ADD PRIMARY KEY (编号);

如果需要命名PRIMARY KEY约束,以及为多个列定义PRIMARY KEY约束,请使用下面的SQL语法:

Alter TABLE 人员

ADD CONSTRAINT pk_人员 PRIMARY KEY (编号,姓名);

四、创建CHECK(检查)约束约束

CHECK约束用于限制列中的值的范围。如果对单个列定义CHECK约束,那么该列只允许特定的值。如果对一个表定义CHECK约束,那么此约束会在特定的列中对值进行限制。

下面的SQL语句在“人员表创建时为“编号列创建CHECK约束。CHECK约束规定“编号列必须只包含大于0的整数。

Create TABLE 人员

(

  编号 int,

  姓名 varchar(25),

  性别 varchar(5),

  住址 varchar(55),

  国籍 varchar(50),

  CONSTRAINT CK_编号 CHECK (编号>0)

);

注意,ACCESSSQLCHECK关键字只能在CONSTRAINT子句中运用。

五、创建NOT NULL (非空)约束

NOT NULL(非空)——用于防止NULL值进入指定的列,在单列基础上定义,默认情况下,ACCESS允许在任何列中有NULL值。

1、在创建表时直接指定字段的NOT NULL约束,如:

Create TABLE 人员

(

  编号 int NOT NULL,

  姓名 varchar(25) NOT NULL,

  性别 varchar(5),

  住址 varchar(55),

  国籍 varchar(50)

);

这条语句在创建人员表时直接指定了编号姓名两个列不能为空。

2、通过修改字段属性来完成对非空约束的指定,这对于已存在的表非常有用,例如:

Alter TABLE 人员

Alter COLUMN 编号 INT NOT NULL;

3、删除字段的非空约束

如果不需要非空约束,我们可以将其删除,如:

Alter TABLE 人员

Alter COLUMN 编号 INT NULL;

通过这测试,我们发现在ACCESS的约束的定义与删除中唯一不需要也不能在CONSTRAINT子句中应用,只能在创建与修改表时直接在字段定义后指定。

关于POREIGN KEY(外键)约束这里不作说明,放在创建表间的关系中一并说明。

六、删除各种约束

有时候,太多的约束也不一定是数据管理的实际需要的,我们要将其删除,不过删除时必须提供其名字,如:

Alter TABLE 人员

Drop CONSTRAINT CK_编号;

从这我们可以看出,删除各种约束非常简单,只是要确定删除对象的名称,这就要求我们在定义数据库表时,定义各种约束对象时一定要为其指定一个有意义的名字,千万不要偷懒让系统为其产生随机的名字,这样在将来的维护中才能有方便快捷,否则,后果非常严重的。


七、DEFAULT(默认值)约束

DEFAULT(默认值)约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。就是说,如果给表中的某个字段添加了DEFAULT(默认值)约束,当向表中插入记录数据时,该字段如果不指定值,则系统自动填充DEFAULT指定的值。

1、创建表时指定DEFAULT(默认值)约束

下面的SQL语句在“人员表创建时为“国籍列创建DEFAULT约束:

Create TABLE 人员

(

  编号 INT NOT NULL,

  姓名 varchar(15) NOT NULL,

  性别 varchar(1),

  住址 varchar(50),

  国籍 varchar(20) DEFAULT '中国'

);

2、修改字段的DEFAULT(默认值)约束

如果表已经存在,可以通过下面的SQL语句来修改字段属性,指定DEFAULT约束:

Alter TABLE 人员

Alter COLUMN 国籍 SET DEFAULT '中国';

3、删除已有的DEFAULT(默认值)约束

如果需要撤销(删除)DEFAULT约束,我们可以使用下面的SQL语句:

Alter TABLE 人员

Alter COLUMN 国籍 Drop DEFAULT;



Access软件网交流QQ群(群号:198465573)
 
 相关文章
全面掌握MS ACCESS SQL(07)  【Big Young  2017/12/26】
全面掌握MS ACCESS SQL(08)  【Big Young  2017/12/27】
全面掌握MS ACCESS SQL(09)  【Big Young  2017/12/29】
全面掌握MS ACCESS SQL(11)  【Big Young  2018/1/4】
全面掌握MS ACCESS SQL(12)  【Big Young  2018/1/4】
全面掌握MS ACCESS SQL(13)  【Big Young  2018/1/5】
常见问答
技术分类
相关资源
文章搜索
关于作者

Big Young

文章分类

文章存档

友情链接