资源预览内容
第1页 / 共82页
第2页 / 共82页
第3页 / 共82页
第4页 / 共82页
第5页 / 共82页
第6页 / 共82页
第7页 / 共82页
第8页 / 共82页
第9页 / 共82页
第10页 / 共82页
亲,该文档总共82页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
任务三 管理数据库表,任务单,任务三 管理数据库表,3.1 实现数据完整性与约束 3.2 创建规则和默认值 3.3 创建索引,3.1 数据完整性与约束,3.1.1 数据完整性 1域完整性 域完整性(即列完整性),指定一组对列有效的数据值,并确定是否允许有空值。 2实体完整性 实体完整性(即表完整性),要求表中所有的行具有唯一的标识符。 3参照完整性 参照完整性(即引用完整性),要求确保始终保持主表主键和引用表外键关联字段一致性的关系,并可设置主表和引用表之间操作上的级联关系,如级联更新和级联删除等。,3.1 数据完整性与约束,3.1.2 设置约束 约束是实现数据完整性的首选方法。约束确保在列中录入有效的数据值,并且维护表之间的关联。 1)主键(PRIMARY KEY)约束。 2)唯一性(UNIQUE)约束。 3)标识(IDENTITY)。 4)检查(CHECK)约束。 5)默认值(DEFAULT)约束。 6)是否可以为空值(NULL)。 7)外键(FOREIGN KEY)约束。,1、PRIMARY KEY(主键)约束,一个表通常可以通过一个列或多个列组合的数据来惟一标识表中的每一行,这个列或列组合的数据就被称为表上的主键。主键可以来强制实体完整性。 表的主键约束有以下几个特征和作用: 1)主键约束通过不允许一个或多个列输入重复的值来保证一个表中所有行的惟一性,使所有行都是可区分的; 2)一个表上只能有一个,且组成主键的列的数据都不能取空值; 3)当定义主键约束时,SQL Server在主键列上建立惟一性索引,这个索引在主键被查询时可以加快查询的速度,2唯一性(UNIQUE)约束,使用惟一性约束的作用是保证在不是主键的指定惟一性的列上不会出现重复的数据。 使用惟一性约束和主键约束都可以保证数据的惟一性,但它们之间有两个明显的不同: 1)一个表上只能定义一个主键约束,但可以定义多个惟一性约束。 2)定义了惟一性约束的列上的数据可以为空值,且只允许有一条记录在字段上取值为空,而定义了主键约束的列上的数据不能为空值。,3标识(IDENTITY),每一个表都可以有一个标识列,其中包括由系统自动生成的能够标识表中每一行数据的惟一序列值。 其格式:IDENTITY(初始值,步长) 初始值表示表中第一行数据的标识列的取值,默认初始值为1,步长,即每一个新标识列值比上一个增长多少,默认步长值也为1。,注 意: 1)每张表只允许有一个标识列; 2)该列必须使用下列数据类型之一:decimal、int、numeric、smallint和tinyint; 3)该列必须设置为不允许为空值,且不能有默认值。,4检查(CHECK)约束,检查约束可以用来限制列上可以接受的数据值,检查约束使用逻辑表达式来限制列上可以接受的数据。 例如,可以指定orders中的订货数量必须大于零,这样当插入表中的订货记录的订货数量为0或负数时,插入操作不能成功执行,从而保证了表中数据的正确性。 可以在一列上使用多个检查约束,也可以在表上建立一个可以在多个列上的使用的检查约束。,5默认值(DEFAULT)约束,数据库中每一行记录中的每一列都应该有一个值,当然这个值也可以是空值。但有时向一个表中添加数据(添加一行记录)时不知道某列的值或该列的值当时还不能确定,这时可以将该列定义为允许接受空值或给该列定义一个默认值。 默认值就是当向表中插入数据时,如果用户没有明确给出某一列的值,SQL Server自动为该列添加的值。,6非空(NOT NULL)约束,空值(NULL)意味着数据尚未输入,从未对该列赋过值。 它与0或长度为零的字符串(“”)的含义不同。 如果表中的某一列必须有值才能使记录有意义,那么可以指明该列不允许取空值。,7外键(FOREIGN KEY)约束,外键也是由表中的一个列或多个列组成的,它是和在相关表中事先定义的具有惟一性的列一起使用的,该列可以是所在表的主键。 外键约束用来建立和强制两个表之间的关联,即一个表的一个列或列组合与另一个表中的具有惟一性的列或列组合相关,这个列或列组合就成为一个表中的外键。 外键约束限制将破坏主从表相关联的操作。,3.1.3 强制数据完整性与约束的关系,3.1.4 设置约束信息,1通过企业管理器设置约束 与修改表一样,打开企业管理器,展开数据库,选择数据库中的“表”节点,并在右边的窗口选择要修改的表,右击在弹出的快捷菜单中选择“设计表”,打开“修改表”窗口。,(1)设置主键,1)选择设置主键的列,单击图中设置主键工具 。 2)单击图中管理索引/键工具,查看主键的设置与命名,在图中可以看到当创建了主键,系统自动为该列创建了聚集索引(CLUSTERED)。,(2)设置标识,在设计表“customer表”中,如图设置字段“客户ID”具有标识,初始值为1000,步长为1。,(3)设置字段是否允许为空值,在设计表“customer表”中,设置列“邮政编码”允许为空,其他列不允许为空。,(4)设置检查(CHECK)约束,在设计表“customer”中,单击“管理约束”工具,选择“CHECK约束”页,如下图进行设置字段“邮政编码”的6个字符的取值范围为0-9。 在设计表“goods”表中,单击“管理约束”工具,选择“CHECK约束”页,设置“单价”、“库存量”、“订购量”等字段取值范围0。,(5)惟一性约束,在设计表“customer表”中,单击“管理索引/键”工具,进入“属性”窗口,设置列“电话”具有惟一性约束。,(6)设置外键,在设计表“orders”中,单击“管理关系”工具,设置“order”表为外键表,表中的列“客户ID”参照主键表“customer” 表中的列“客户ID”的记录数据,同时,设置级联更新。,注 意: 1)系统自动建立外键约束名:FK_orders_customer。 2)由于各表之间存在外键关联,受外键影响,各表建立时,存在先后顺序。,(7)设置默认值,在设计表“ordersorders”中,选择字段“订购日期”,通过函数GETDATE(),设置该字段默认取值为系统服务器当前时间,2利用T-SQL语句设置约束,约束本身不是独立的数据对象,它是依附于表的设计而建立的,且由于各表之间的外键关联,建表存在先后顺序。,(1)建立“顾客表customer”,CREATE TABLE customer (客户ID int CONSTRAINT PK_customer PRIMARY KEY IDENTITY (1000, 1), /*在该字段上,设置标识*/ 公司名称 nvarchar(30) NOT NULL, /*设置该字段不允许为空值*/ 联系人 char(8) NOT NULL, 联系人职务 varchar(20) NOT NULL, 地址 nvarchar(40) NOT NULL, 城市 varchar(10) NOT NULL, 邮政编码 char(6) NULL /*设置该字段允许为空值*/ CONSTRAINT CK_customer CHECK (邮政编码like 0-90-90-90-90-90-9), 电话 char(14) NOT NULL CONSTRAINT 电话_customer UNIQUE ) ON PRIMARY,(2)建立“商品表goods”,CREATE TABLE goods ( 产品ID int IDENTITY (1, 1) CONSTRAINT PK_goods PRIMARY KEY , 产品名称 varchar(12) NOT NULL , 类型 varchar(12) NOT NULL , 供应商 varchar(12) NOT NULL , 单位数量 varchar(16) NOT NULL , 单价 money NULL , 库存量 int NULL , 订购量 int NULL, CONSTRAINT CK_goods CHECK (单价 0 and 库存量 0 and 订购量 0) ) ON PRIMARY,(3)建立“订单表orders”,CREATE TABLE orders ( 订单ID int NOT NULL CONSTRAINT PK_orders PRIMARY KEY, 客户ID int NOT NULL CONSTRAINT FK_orders_customer FOREIGN KEY REFERENCES customer (客户ID) /* 外键约束*/ ON UPDATE CASCADE, /*在外键约束上,级联更新*/ 销售人 char(8) NOT NULL, 订单金额 money NULL, 订购日期 datetime NOT NULL CONSTRAINT DF_orders_订购日期 DEFAULT (getdate(), 发货日期 datetime NULL, 到货日期 datetime NULL ) ON PRIMARY,(4)建立“订单明细表detail”,CREATE TABLE detail ( 订单ID int NOT NULL CONSTRAINT FK_detail_orders FOREIGN KEY REFERENCES orders (订单ID) /* 外键约束*/ ON DELETE CASCADE ON UPDATE CASCADE 产品ID int NOT NULL CONSTRAINT FK_detail_goods FOREIGN KEY REFERENCES goods(产品ID) ON UPDATE CASCADE , 单价 money NOT NULL, 数量 int NOT NULL , 金额 money NOT NULL , CONSTRAINT PK_detail PRIMARY KEY CLUSTERED ( 订单ID, 产品ID ) ON PRIMARY, CONSTRAINT CK_detail CHECK (单价 0 and 数量 0 and 金额 0) ) ON PRIMARY,(5)查看表上的约束,查看表上的约束的方法有两种: 1)可以采用系统存储过程SP_HELPCONSTRAINT来显示表上所定义的约束。 例如:EXEC SP_HELPCONSTAINT orders 2)可以采用系统存储过程SP_HELP来显示表上所定义的约束。 例如:SP_HELP orders,(6)约束的删除,ALTER TABLE 表名 DROP CONSTRAINT 约束名 , n,3.2 创建规则和默认值,与声明型数据完整性相对的还有一种数据完整性的实施方法,被称为过程型数据完整性。 过程型数据完整性的实现是独立于表而存在的,需要与表进行绑定,它是由默认值、规则和触发器等数据库对象实现的,这些数据完整性不是一个表所独有的,它们可以应用于数据库中不同的表。 规则和默认值都是独立的数据库对象,本身并不像约束依附于表存在而存在,当表被删除时,约束也被删除,但规则和默认值可以独立建立,独立存在,需要作用于表的某列上时,可以绑定在其上,不需要时也可解除绑定,也可同时绑定在多个表和多个列上。,3.2.1 创建规则,规则与检查约束的不同之处: 1)检查约束是在建表时或修改表时建立在需要的列上的,而规则则作为独立的数据库对象来实现。 2)表的一列上只能使用一个规则,但可以使用定义多个的检查约束。 3)规则可以应用于该数据库中的不同表的多个列,还可应用于用户自定义的数据类型上,而检查约束只能应用于它定义的列上。,3
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号