WEB开发网
开发学院数据库DB2 DB2中多种常用功能的解决方法 阅读

DB2中多种常用功能的解决方法

 2007-05-20 16:18:39 来源:WEB开发网   
核心提示: create table employee(name char(10), salary dec(10,2), commission dec(10,2),compensation dec(11,2)generated always as (commission + salary))通过下面的
create table employee
(name char(10), salary dec(10,2), commission dec(10,2),
compensation dec(11,2)
generated always as (commission + salary))

通过下面的 SQL 语句来保持 COMPENSATION 列的准确性:

insert into employee (name, salary, commission) values ('Blair',5,10)

update employee set salary=0

您需要唯一地标识每一行。我们将在稍后讨论这一点。

要求不区分大小写来创建索引,接下来就介绍这一点。

区分大小写

区分大小写是功能强大的,而且如果 RDBMS 知道 Greenland 与 greenland 不匹配,它会搜索得更快。然而,用户如果提交对“Macinnis”的搜索,他们可能实际上希望您的应用程序返回“MacInnis”。对于名称搜索,您可能要考虑在 NAME 列上创建一个索引。然而,DB2 索引中的值也是区分大小写的。让 MacInnis=Macinnis 很简单,只要使用 UPPER 或 UCASE 函数即可:

SELECT NAME FROM EMPLOYEE WHERE UPPER(NAME) = 'MACINNIS'

但是,这会强制进行表扫描,而且您得不到索引的好处。这就是引入生成的列的用途所在:如果标准访问方法是关于名称的搜索,那么使用生成的列来以大写格式存储名称:

CREATE TABLE EMPLOYEE (NAME VARCHAR(10),
NAME_UP
GENERATED ALWAYS AS (UPPER(name)))

现在在这个列的大写版本上创建索引:

CREATE INDEX NAME_IND ON EMPLOYEE ( NAME_UP )

该查询可以获得索引的好处,并避免了表扫描:

SELECT NAME FROM EMPLOYEE WHERE UPPER(NAME) = 'MACINNIS'

让我们看看如何用生成的列来枚举行。我们为什么要给行编号?关系理论告诉我们行与列没有内在的顺序:您可以在请求数据时指定顺序。但人们喜欢给事物编号,从书中的页号到运动衫上的号码。您可能知道在计算机科学中数据被看成表格式关系模型。您的用户有多少学会查看 Lotus 和 Excel 电子表格中的表格式数据(屏幕左边有向下递增的行号)呢?大多数关系数据库管理系统都有内部 RID(行标识)或 TID(元组标识)。OS/390® 上的 DB2 和 Oracle 将这一点具体化,使程序无需知道内容就可以方便地标识行。我们没有具体化 Windows/UNIX/OS/2 上 DB2 的行标识,因为我们允许它改变:潜在主键中的一个危险特性。DB2 的确有其它方法将一列作为人工主键使用。

上一页  1 2 3 4 5 6 7  下一页

Tags:DB 多种 常用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接