开发学院数据库DB2 DB2 SQL 与 XQuery 教程,第 6 部分: 数据定义语言... 阅读

DB2 SQL 与 XQuery 教程,第 6 部分: 数据定义语言和数据控制语言

 2009-11-28 00:00:00 来源:WEB开发网   
核心提示:开始之前关于本系列本系列教程为您讲解 SQL 的一些基础和高级话题以及 XQuery 的基础知识,并展示如何使用 SQL 查询或 XQuery 语句将常被问起的业务问题表达为数据库查询,DB2 SQL 与 XQuery 教程,第 6 部分: 数据定义语言和数据控制语言,开发人员和数据库管理员可以使用本教程来提高他们的数

开始之前

关于本系列

本系列教程为您讲解 SQL 的一些基础和高级话题以及 XQuery 的基础知识,并展示如何使用 SQL 查询或 XQuery 语句将常被问起的业务问题表达为数据库查询。开发人员和数据库管理员可以使用本教程来提高他们的数据库查询技能。Academic Initiative 成员可以使用本教程系列作为他们数据库课程的一部分。

本文中的所有例子都是基于 Aroma,这是一个示例数据库,其中包含了在美国各地的商店中出售的咖啡和茶用品的销售数据。每个例子由以下三部分组成:

以日常用语表达的一个业务问题

以 SQL 或 XQuery 表达的一个或多个例子查询

显示从数据库返回的结果的一个表

本指南是为了让读者学习 SQL 语言和 XQuery 而设计的。和学习任何其他技能一样,重要的是一边学习一边实践。本指南给出的表定义和数据为学习提供了便利。

对于使用本指南作为学校课程一部分的学生而言,他们应该向老师学习连接到 Aroma 数据库的操作,并了解本指南的设置与您本地设置的不同之处。

感谢您选择 IBM® DB2® 来了解服务于纯关系结构和 pureXML 结构的数据的混合型数据服务器。

本教程是针对于 DB2 Express-C 9 for Linux®, UNIX®, and Windows® 而编写的。

关于本教程

本系列教程以前的各个部分都重点讨论了 SELECT 语句。本教程将介绍 SQL 的其他组成部分和语句,包括:

CREATE TABLE

INSERT

UPDATE

DELETE

ALTER TABLE

CREATE VIEW

CREATE INDEX

DROP TABLE

GRANT

REVOKE

连接到数据库

在使用 SQL 查询或操纵数据之前,需要连接到一个数据库。CONNECT 语句将一个数据库连接与一个用户名相关联。

如果您使用本指南作为学校课程的一部分,那么可以向老师询问要连接到的数据库的名称。对于本系列,数据库名为 aromadb。

要连接到 aromadb 数据库,可以在 DB2 命令行处理器中输入以下命令:

 CONNECT TO aromadb USER userid USING password

注意用老师告诉您的用户 ID 和密码替换 “userid” 和 “password”。如果不需要用户 ID 和密码,那么只需使用以下命令:

 CONNECT TO aromadb

如果看到下面的消息,则说明您已经建立一个成功的连接:

 Database Connection Information 
 Database server   = DB2/NT 9.0.0 
 SQL authorization ID = USERID 
 Local database alias = AROMADB

建立连接后,就可以开始使用数据库了。

SQL 的组成部分

SQL 由三部分组成:数据操纵语言(DML)、数据定义语言(DDL)和数据控制语言(DCL)。DML 又由 SELECT、UPDATE、INSERT 和 DELETE 语句组成;DDL 则由 CREATE、ALTER 和 DROP 语句组成;数据控制语言则由 GRANT 和 REVOKE 语句组成。


SQL 组成部分语句描述
DMLSELECT用于显式查询结果
UPDATE用于更改表中已有的值。UPDATE 会影响列级上的数据
INSERT用于向表中插入新行。INSERT 会影响行级上的数据
DELETE用于从表中删除行。DELETE 会影响行级上的数据
DDLCREATE TABLE用于创建新表
ALTER TABLE用于添加、修改或撤销列
CREATE VIEW用于创建新的视图
CREATE INDEX用于创建新的索引
DROP TABLE用于删除表
DCLGRANT用于将权限授予数据库的用户
REVOKE用于撤销数据库用户的权限


使用中的注意事项

本系列之前的教程都与 SELECT 语句有关。这也是终端用户最常用的语句。

有些语句,例如 CREATE、GRANT 和 REVOKE,可能需要管理权限才能发出。作为一名用户,您可能有、也可能没有运行某些语句的许可。

CREATE TABLE 语句

练习

为了进行促销,销售部发起了一项新的会员活动。客户可以购买一个 “金卡(Gold Card)”,然后就能享受各种折扣、免费礼品和电子邮件提醒促销活动等好处。

每家商店出售预先编号的卡。

在 Aroma 数据库中创建一个名为 Gold 的新表,用于存放金卡 客户的信息。这个表应该具有包含惟一卡号、商店代码、名字、姓氏、电子邮箱和状态等值的列。

例子查询

CREATE TABLE aroma.gold 
  (card_id SMALLINT NOT NULL PRIMARY KEY, 
  storekey INTEGER NOT NULL, 
  fname VARCHAR(20) NOT NULL, 
  lname VARCHAR(20) NOT NULL, 
  email VARCHAR(30), 
  status VARCHAR(10) NOT NULL, 
  FOREIGN KEY (storekey) REFERENCES aroma.store (storekey));


结果

可以发出一条 SELECT 语句,看看 CREATE TABLE 语句的结果。

SELECT * FROM aroma.gold;


Card_idStorekeyFnameLnameEmailStatus


CREATE TABLE 语句的语法

CREATE TABLE table_name 
  (column_name1 column_descrpition, 
  column_name2 column_descrpition, 
  column_name3 column_descrpition, 
  ... , 
  [FOREIGN KEY (column_name) REFERENCES table_name2 (column_name2)] 
  );


关于该查询

该查询使用一条 CREATE TABLE 语句在 Aroma 数据库中创建一个名为 Gold 的表。CREATE 语句必须以 CREATE 这个单词开头。第二个单词告诉 DB2 要创建的对象的类型(table),而第三个单词则为对象命名(Gold)。

括号中是定义列的列描述区域。每个列必须指定三样东西:列名、数据类型和 null 特征。

PRIMARY KEY 子句是可选的。该子句确保 card_id 列中的值是惟一的—— 两张卡不能有相同的 ID。

FOREIGN KEY 子句也是可选的。它将 Gold 表的 storekey 列与 Store 表的 storekey 列连接起来。这样可以确保商店代码是存在且有效的,并且这两个列包含具有相同数据类型的值。

要了解关于 CREATE TABLE 语句的更多信息,请查看 DB2 Information Center 。本系列的 第 1 部分 对 DB2 信息中心做了介绍。



列名

表和列必须遵从 DB2 命名惯例:

表名的首字符必须是一个字母字符或国际符号。这包括字母 A-Z、美元符号($)、at 符号(@)和编号符(#)。

后续字符可以是字母字符、数字 0-9 和下划线(_)的组合。在大多数情况下,下划线可用作视觉上的分隔符。

表/列名的长度因平台而异。请参考 SQL Reference Guide(见 参考资料),了解这方面的细节。

数据类型

一个列必须存储一种特定数据类型的值。

  
数值 所有数值都有一个符号和一个精度(precision)。精度是指除符号外数字的位数。数值类型包括 SMALLINT、INTEGER、BIGINT、REAL、DOUBLE 和 DECIMALS
字符串 字符串是一个字节序列。字符串的长度是指序列中字节的个数。如果长度为 0,则该字符串称做空串。字符串类型包括定长字符串和变长字符串(VARCHAR、LONG VARCHAR 和 CLOB)
图形字符串 图形字符串是一个双字节字符数据序列。图形字符串包括定长图形字符串和变长图形字符串
二进制串 二进制串是一个字节序列。它用于存放非传统数据,例如图片。二进制大对象(Binary Large OBject,BLOB)就是一种二进制串。详细信息请参阅大对象(Large Object,LOB)
日期时间值 日期时间值是对日期、时间和时间戳(一个 14 位的字符串,以 yyyyxxddhhmmss 格式表示一个有效的日期和时间)的表示。日期时间值可用于某些数值和字符串操作,并且与某些字符串兼容。但是,它们既不是字符串,也不是数值。日期时间值包括 Date、Time 和 Timestamp
null 值 null 值是一个特殊的值,不同于所有非空值。它意味着行中的那一列不存在任何其他值。所有数据类型都可以有 null 值
XML DB2 9 是业界第一款能同时管理纯关系结构和 pureXML 结构的数据的混合型数据服务器。除了已有的关系引擎外,DB2 9 还引入了用于 XML 数据的一种优化的数据存储引擎

要了解关于数据类型的详细信息,请参阅本系列的 第 1 部分。

null 特征

Card_id、storekey、fname 和 lname 都被定义为 NOT NULL,因为它们是每一行都必须有的重要信息。在这个表中,没有 card_id 的行是没有意义的。

如果忽略了 null 特征,那么缺省为 NULL。Email 被允许为 null,因为并不是所有客户都有电子邮箱。他们仍能够享受折扣和免费礼品。

定义好所有的列之后,就可以定义主键和外键。这里不需要指定外键所引用的主键,因为 DB2 可以通过编目信息得知主键。

在开始学习接下来的内容之前,您应该看一下 DB2 Information Center ,阅读关于 CREATE TABLE 语句的完整的在线文档。这有助于熟悉帮助文档的格式,并且能回顾刚才学过的内容。

INSERT 语句

练习

一名客户刚刚从商店代码为 1 的商店购买了第一张金卡。她的名字叫 Ada Alexander,电子邮箱是 coffee_lover@hotmail.com。

为了便于练习,假设这家商店拥有号码为 1 到 100 的金卡。

将她的记录输入到 Gold 表中,其状态设为 Active。

例子查询

INSERT INTO aroma.gold 
VALUES(1, 1, 'Ada', 'Alexander', 'coffee_lover@hotmail.com', 
'Active');


结果

SELECT * FROM aroma.gold;


Card_idStorekeyFnameLnameEmailStatus
11AdaAlexandercoffee_lover@hotmail.comActive


INSERT 语句的语法

INSERT INTO table_name 
 VALUES(value1, value2, value3, ...);


关于该查询

这个例子查询阐释了一个 INSERT 语句,该语句将一个新行添加到 Gold 表中。注意,INSERT 语句中值的顺序与表中列的顺序应该一致。还应注意,表中每个列对应一个值。

如果值是字符类型,那么必须以单引号括起来。

要了解关于 INSERT 语句的详细信息,请查看 DB2 Information Center 。

还可以使用一条 INSERT 语句将多个行插入到一个表中。

练习

接下来又有更多的客户从商店代码为 1 的商店购买了金卡。他/她们的姓名是 Ben Bowman - mmmcoffee@yahoo.com、Cynthia Chen - iheartcoffee@gmail.com、David Doyle - coffee_maniac@msn.com、Emily Enright - cupAday@hotmail.com 和 Frank Freeman - coffee_addict@gmail.com。用一条语句将他/她们的记录输入到 Gold 表中。

例子查询

INSERT INTO aroma.gold 
VALUES(2, 1, 'Ben', 'Bowman', 'mmmcoffee@yahoo.com', 'Active'), 
   (3, 1, 'Cynthia', 'Chen', 'iheartcoffee@gmail.com', 'Active'), 
   (4, 1, 'David', 'Doyle', 'coffee_maniac@msn.com', 'Active'), 
   (5, 1, 'Emily', 'Enright', 'cupAday@hotmail.com', 'Active'), 
   (6, 1, 'Frank', 'Freeman', 'coffee_addict@gmail.com', 'Active');


结果

SELECT * FROM aroma.gold;


Card_idStorekeyFnameLnameEmailStatus
11AdaAlexandercoffee_lover@hotmail.comActive
21BenBowmanmmmcoffee@yahoo.comActive
31CynthiaCheniheartcoffee@gmail.comActive
41DavidDoylecoffee_maniac@msn.comActive
51EmilyEnrightcupAday@hotmail.comActive
61FrankFreemancoffee_addict@gmail.comActive

UPDATE 语句

练习

Emily Enright 最近和 Frank Freeman 结了婚,她的姓改成了 'Freeman'。更新 Gold 表,以反映这一变化。

例子查询

UPDATE aroma.gold 
SET lname = 'Freeman' 
WHERE card_id = 5;


结果

SELECT * FROM aroma.gold;


Card_idStorekeyFnameLnameEmailStatus
11AdaAlexandercoffee_lover@hotmail.comActive
21BenBowmanmmmcoffee@yahoo.comActive
31CynthiaCheniheartcoffee@gmail.comActive
41DavidDoylecoffee_maniac@msn.comActive
51EmilyFreemancupAday@hotmail.comActive
61FrankFreemancoffee_addict@gmail.comActive


UPDATE 语句的语法

UPDATE table_name 
SET column_name = new_value 
[WHERE search_condition];


search_condition该条件的值为 true 或 false

SET 子句指定要更新的列和新的列值。

WHERE 子句很重要。如果忽略了该子句,那么表中所有行的 column_name 列都将被设为 new_value。

关于该查询

在这个例子中,WHERE 子句用于让 DB2 找到要更新的列。在这里,一个惟一的标识符就变得很重要了。您只想 UPDATE 一个特定的 Emily Enright。虽然 Gold 表目前还很小,只包含一个 Emily Enright,但是它可能会不断变大,然后包含多个具有相同姓名的记录。因此,更安全的做法是坚持使用惟一标识符。

DELETE 语句

练习

Frank Freeman 取消了他的会员身份。从数据库中删除他的记录。

例子查询

DELETE FROM aroma.gold 
WHERE card_id = 6;


结果

SELECT * FROM aroma.gold;


Card_idStorekeyFnameLnameEmailStatus
11AdaAlexandercoffee_lover@hotmail.comActive
21BenBowmanmmmcoffee@yahoo.comActive
31CynthiaCheniheartcoffee@gmail.comActive
41DavidDoylecoffee_maniac@msn.comActive
51EmilyFreemancupAday@hotmail.comActive


DELETE 语句的语法

DELETE FROM table_name 
[WHERE search_condition];


search_condition这个条件的值为 true 或 false

WHERE 子句很重要。如果忽略了该子句,那么表中所有的行都将被删除。

关于该查询

这里的 DELETE 语句将把 Frank Freeman 从 Gold 表中删除。同样,这里必须指出一个条件,条件中指定一个惟一标识符。 如果条件是 “WHERE lname = 'Freeman'”,那么 Frank 和 Emily Freeman 的记录都将被删除。

ALTER TABLE 语句



练习

销售部又提出了另一个计划。如果介绍 5 个人成为金卡成员的金卡客户,将赢得价值 20 美元的免费礼品券。为 Gold 表增加一个名为 referrals 的列。



例子查询

ALTER TABLE aroma.gold 
ADD referrals SMALLINT;



结果

SELECT * FROM aroma.gold;



Card_idStorekeyFnameLnameEmailStatusReferrals
11AdaAlexandercoffee_lover@hotmail.comActive 
21BenBowmanmmmcoffee@yahoo.comActive 
31CynthiaCheniheartcoffee@gmail.comActive 
41DavidDoylecoffee_maniac@msn.comActive 
51EmilyFreemancupAday@hotmail.comActive 


ALTER TABLE 语句的语法

ALTER TABLE table_name 
ADD column_name column_definition;


关于该查询

这个查询增加一个名为 referrals 的新列,该列存放最长为 5 位数的整数。

新列的所有字段暂时为 null 值。

练习

card_id 列在创建时被定义为 SMALLINT 类型,它支持最长为 5 位数的整数。随着 Gold 表的增长,可能要用到更大的 id 号。更改 card_id 列,使之包含 INTEGER 类型的值。

结果 —— 执行 ALTER 语句之前

在更改 card_id 的数据类型之前,对 syscolumns 表执行 SELECT 操作,查看当前的数据类型。

SELECT * FROM sysibm.syscolumns 
WHERE tbname='GOLD' 
AND tbcreator='AROMA';



NAMETBNAMETBCREATORREMARKSCOLTYPENULLS...
CARD_ID GOLDAROMA  SMALLINT N...
EMAILGOLDAROMA  VARCHARY...
FNAMEGOLDAROMA  VARCHARN...
LNAMEGOLDAROMA  VARCHARN...
REFERRALSGOLDAROMA  SMALLINTY...
STATUSGOLDAROMA  VARCHARN...
STOREKEYGOLDAROMA  INTEGERN...


例子查询

ALTER TABLE aroma.gold 
ALTER card_id SET data type INTEGER;


结果 —— 执行 ALTER 语句之后

syscolumns 表现在显示执行 ALTER 语句之后的数据类型。

SELECT * FROM sysibm.syscolumns 
WHERE tbname='GOLD' 
AND tbcreator='AROMA';



NAMETBNAMETBCREATORREMARKSCOLTYPENULLS...
CARD_ID GOLDAROMA  INTEGER N...
EMAILGOLDAROMA  VARCHARY...
FNAMEGOLDAROMA  VARCHARN...
LNAMEGOLDAROMA  VARCHARN...
REFERRALSGOLDAROMA  SMALLINTY...
STATUSGOLDAROMA  VARCHARN...
STOREKEYGOLDAROMA  INTEGERN...

注意: 出于篇幅的考虑,某些列有所删节。

ALTER TABLE 语句的语法

ALTER TABLE table_name 
ALTER column_name SET data type new_definition;


关于该查询

这个查询将 card_id 的数据类型改为 INTEGER,这种类型支持最长为 10 位数的整数。

还应注意,新增的 referrals 列的 nulls 值为 Y,这意味着这个列可以包含 null 值。在创建这个列时,我们没有为之指定 null 特征。

要了解关于系统表的更多信息,请参阅本系列的 第 1 部分:“元数据”。

练习

介绍制并没有产生合理的结果,也没有获得正面的客户反馈。于是,公司决定终止这个计划。删除 referrals 列。

例子查询

ALTER TABLE aroma.gold 
DROP COLUMN referrals;


结果

SELECT * FROM aroma.gold;


Card_idStorekeyFnameLnameEmailStatus
11AdaAlexandercoffee_lover@hotmail.comActive
21BenBowmanmmmcoffee@yahoo.comActive
31CynthiaCheniheartcoffee@gmail.comActive
41DavidDoylecoffee_maniac@msn.comActive
51EmilyFreemancupAday@hotmail.comActive


ALTER TABLE 语句的语法

ALTER TABLE table_name 
DROP COLUMN colum_name;


关于该查询

这个查询删除名为 referrals 的列。

CREATE VIEW 语句

练习

为了保护客户的隐私,对于数据库用户,fname、lname 和 email 列必须不可见。创建 Gold 表的一个视图,其中只包含 card_id、storekey 和 status 列。

例子查询

CREATE VIEW aroma.gold_public(card_id, storekey, status) AS 
SELECT card_id, storekey, status 
FROM aroma.gold;


结果

SELECT * FROM aroma.gold_public;


Card_idStorekeyStatus
11Active
21Active
31Active
41Active
51Active


CREATE VIEW 语句的语法

CREATE VIEW view_name(view_column_list) AS 
SELECT table_column_list 
FROM table_name;


view_column_list视图中各列名称的列表。这里的列名与 SELECT 语句中的 table_column_list 是一对一的关系。如果没有指定列名,那么视图就使用与 SELECT 语句的结果表中的列相同的名称
table_column_list要从 table_name 表中选择的列的列表


关于该查询

创建 Gold 表的一个公共视图,只显示客户的 card_id、storekey 和 status 信息。

查询的第一行为视图命名(gold_public),并定义它的列(card_id、storekey 和 status)。名称 gold_public 在它的模式内必须是惟一的。虽然视图不包含数据,但是视图名称和表名的用法是类似的。这个视图将有三个列,card_id、storekey 和 status,分别对应于 Gold 表的 card_id、storekey 和 status 列。

第二行是一个 SELECT 语句,描述要从 Gold 表中选择哪些值。它可以包括子句 ALL、DISTINCT、FROM、WHERE、GROUP BY 和 HAVING。

CREATE INDEX 语句

练习

SELECT 语句直接从 Gold 表中查找 storekey 要花太多的时间。因此可以创建 storekey 上的一个索引来解决这个问题。

访问计划 —— 之前

使用索引可以提高数据表上的查询性能。您可以看看访问计划,比较一下没有查询和有查询这两种情况下查询的性能。

在 Command Editor 中输入以下查询,然后单击 Execute and Access plan 按钮。这将执行该查询,并提供查询的执行计划的图形化表示。

SELECT * from aroma.gold;

在 Command Editor 中单击 Access Plan 标签,查看 DB2 访问计划。注意,aroma.gold 表上执行了一个表扫描(TBSCAN)。


图 1. 建索引之前的访问计划
DB2 SQL 与 XQuery 教程,第 6 部分: 数据定义语言和数据控制语言


例子查询

CREATE INDEX aroma.gold_index ON aroma.gold (storekey); 
RUNSTATS ON TABLE aroma.gold ON ALL COLUMNS; 
COMMIT WORK;


结果

为了查看查询的性能是否有提高,在 Command Editor 中输入相同的 SELECT 语句,然后单击 Execute and Access plan 按钮。


图 2. 建索引之后的访问计划
DB2 SQL 与 XQuery 教程,第 6 部分: 数据定义语言和数据控制语言


CREATE INDEX 语句的语法

CREATE INDEX index_name ON table (column_list); 
RUNSTATS ON TABLE table ON ALL COLUMNS; 
COMMIT WORK;


column_list要在其上创建索引的列的列表

最后两行确保索引的结果会在随后的查询中反映出来。

关于该查询

该查询首先在 aroma.gold 表的 storekey 节点上创建一个索引,以提高查询性能,然后在 aroma.gold 表上执行 RUNSTATS 操作,以确保 DB2 会考虑新索引。

由于目前表还比较小,因此在这次练习中观察不到查询性能有何变化。不过,这么做的目的只是演示如何创建索引,对于具有相当大的数据量的数据而言,这样做可以大大提高查询性能。

DROP TABLE 语句

练习

金卡项目取得了巨大的成功。销售部决定启动一个新的、经过改良的计划,即白金卡(Platinum Card)计划。经过一段时间后,金卡项目已经被分阶段撤销。于是,这里要删除 Gold 表。

例子查询

DROP TABLE aroma.gold;

结果

SELECT * FROM sysibm.systables 
WHERE creator='AROMA';



NAMECREATOR...
CLASSAROMA...
DEALAROMA...
LINE_ITEMSAROMA...
MARKETAROMA...
ORDERSAROMA...
PERIODAROMA...
PRODUCTAROMA...
PROMOTIONAROMA...
SALESAROMA...
STOREAROMA...
SUPPLIERAROMA...


关于该查询

该查询从 Aroma 数据库删除 Gold 表。这是一个不可逆转的动作。存储在这个表中的所有数据都要丢失。

要了解关于系统表的更多信息,请参阅本系列的 第 1 部分:“元数据”。

数据控制语言

SQL 的第三个组成部分就是数据控制语言(Data Control Language,DCL)。

DCL 包括一些重要的语句,例如 GRANT 和 REVOKE。这些语句控制用户拥有数据库上的哪些权限,例如选择行、更新表、删除数据、修改表结构等。

具有不同角色的用户执行不同的任务,并且应该被给予不同的权限。

GRANT 语句

练习

公司雇用了一个新的数据库管理员来管理 Sales 表,他需要被授予 SELECT、INSERT、UPDATE 和 DELETE 权限。

例子查询

GRANT select, insert, update, delete ON aroma.sales TO user02;

GRANT 语句的语法

GRANT privilege_list ON table_name TO user_name;

  
privilege_list为用户授予的权限的列表。可能的值包括 SELECT、INSERT、UPDATE、DELETE 和 ALL PRIVILEGES


关于该查询

GRANT 语句用于将权限授给数据库用户。

该查询为用户 user02 授予对 Aroma 数据库中的 Sales 表执行 select、insert、update 和 delete 操作的权限。

REVOKE 语句

练习

公司决定,一旦将记录输入到 Sales 表中之后,新的数据库管理员不能更改或删除它们。撤销 user02 的 UPDATE 和 DELETE 权限。

例子查询

REVOKE update, delete ON aroma.sales FROM user02;

REVOKE 语句的语法

REVOKE privilege_list ON table_name FROM user_name;

  
privilege_list要撤销用户的权限的列表。可能的值包括 SELECT、INSERT、UPDATE、DELETE 和 ALL PRIVILEGES


关于该查询

REVOKE 语句用于撤销数据库用户的权限。

该查询撤销用户 user02 对 Aroma 数据库的 Sales 表的 UPDATE 和 DELETE 权限。

结束语

本教程帮助您创建了一个新表,并练习了数据操纵语言(DML)、数据定义语言(DDL)和数据控制语言(DCL)中的语句。

使用 CREATE TABLE 语句创建 Gold 表。

使用 INSERT 语句添加新的行到 Gold 表中。

使用 UPDATE 语句修改 Gold 表中的行。

使用 DELETE 语句删除 Gold 表中的行。

使用 ALTER TABLE 语句增加一列,改变列的数据类型,以及删除 Gold 表中的列。

使用 CREATE VIEW 语句创建 Gold 表的一个公共视图,仅令 card_id、storekey 和 status 列可见。

使用 CREATE INDEX 语句提高 Gold 表的查询性能。

使用 DROP TABLE 语句删除 Gold 表。

使用 GRANT 语句为 Sales 表的用户授予权限。

使用 REVOKE 语句撤销 Sales 表的用户的权限。

本文示例源代码或素材下载

Tags:DB SQL XQuery

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接