读书频道 > 数据库 > SQL Server > SQL权威指南(第4版)
1.4 列与字段
2012-11-28 09:03:49     我来说两句 
收藏    我要投稿   

本文所属图书 > SQL权威指南(第4版)

本书为SQL 名著中文版,兼顾技术与实践,全面细致介绍高级技术,致力于打造SQL 编程专家。本书阐释了数据库设计、优化和操作的各方面内容,提供了成为SQL 编程专业人士所需的技术与技巧、针对新旧挑战性难题的...  立即去当当网订购

记录中字段的含义由读取该字段的应用程序定义,而表中数据行的某一列的含义是由数据库模式定义的。列的数据类型总是标量。

在READ和INPUT 语句中,程序将依照应用程序变量在语句中的顺序读取这些变量,因此变量的顺序非常重要。在SQL 语言中,只能通过列名来引用列。虽然SELECT  * 语句和INSERT INTO  < 表名> 等语句中使用了会扩展成列名列表的缩写,这些扩展后的列名顺序与表定义中列名的顺序相同,不过这些缩写也仅仅是解析成命名列表的缩写而已。

SQL 语言中NULL值的作用不同于其他语言。字段中并不支持可作为字段、记录或文件本身一部分的n 丢失数据标记o。除此之外,不能像SQL 的DEFAULT 和CHECK() 语句那样为记录的字段添加约束。

文件本身是非常被动的,它会毫不反对地接受应用程序丢给它的所有内容。与此同时,文件之间毫无关联,而这只是因为它们每次只与一个应用程序联系,所以并不知道其他文件是什么样子。

数据库活动通过触发器、约束以及声明引用完整性等方式,n 主动o 寻求维护所有数据的正确性。

DRI(Declarative Referential Integrity,声明引用完整性)表明,表中的数据实际上与另一张表(也有可能是同一张表)的数据存有某一特定的关系。数据库可能通过与DRI 相关的引用操作进行自我更改。例如,可能会有这样一条业务规则,规定不能销售仓库中没有的产品。

可以对订单(Orders)表使用REFERENCE 语句声明对仓库(Inventory )表的引用,并定义级联删除(ON DELETE CASCADE )引用操作,强制上述规则。与DRI 相比,触发器是更为通用的方式。触发器是一段程序代码,可以在INSERT INTO和UPDATE 语句执行前、执行时或执行后运行。使用触发器除了可以完成DRI 可以完成的所有操作,还能完成其他功能。

然而,使用触发器会带来一些问题。尽管从SQL -92标准开始,就已经为触发器定义了标准的语法,但大多数厂商并没有实现这个语法,而是使用专有的语法。第二个问题是,触发器无法向优化器输入类似于DRI 的信息。在这一节的示例中,从Orders 表中可以知道每个产品编号,在Inventory 表中也使用相同的产品编号。优化器可以在设置EXISTS() 谓语以及往查询中添加联结时使用这些信息。但是我们无法通过解析过程式触发器代码确定产品编号间的关系。

SQL -92标准中出现的CREATE ASSERTION 语句允许数据库以整个库为单位,强制系统满足指定条件。断言不同于CHECK() 子句,不过其差异很难被觉察到。当往表里添加数据行时,将执行CHECK() 子句。

如果表是空的,那么所有的CHECK() 子句都将返回有效值TRUE。因此,如果想确认Inventory 表非空,我们写下了以下语句。
CREATE TABLE Inventory
( …
CONSTRAINT invento ry_not_empty
       CHECK (( SELECT COUNT( *) FROM Inventory) > 0),
… );

但是这个语句不能成功执行,然而,当编写以下语句时:
CREATE ASSERTION Inventory_not_empty
      CHECK (( SELECT COUNT(*) FROM Inventory) > 0);

我们获得了预期效果。这是因为断言不是在表级,而是在模式级进行检查的。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 行与记录
下一篇:1.5 模式对象
相关文章
图文推荐
3.8 实训项目
3.6 实现数据完整性
3.5.5 外键约束
3.5.3 检查约束
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站