JET 数据库/数据定义语言
通过发出Create Table
语句来创建表。该语句必须指定表名和表中的任何列。
Create Table T (
a integer,
b char(10)
)
通过发出Drop Table
语句来删除表。
Drop Table T
可以通过发出一个或多个Alter Table
语句来更改表。可以添加新列,删除现有列,以及更改现有列。
Alter Table T Add Column c float
go
Alter Table T Drop Column c
go
Alter Table T Alter Column b varchar(20)
go
有关 JET 中可用的数据完整性约束的信息,请参阅数据完整性 |
在 JET SQL 中有几种创建主键的方法。可以在Create Table
语句中使用Primary Key
指令,如下所示
Create Table P1 (
i1 int not null,
c1 varchar(255),
Primary Key(i1)
)
使用Constraint
指令可以创建具有相同主键的相同表,无论是在Create Table
语句中
Create Table P2 (
i1 int not null,
c1 varchar(255),
Constraint PK_P2 Primary Key(i1)
)
还是在Alter Table
语句中之后
Create Table P3 (
i1 int not null,
c1 varchar(255)
)
go
Alter Table P3 Add Constraint PK_P3 Primary Key(i1)
go
如果表的主键中只有一列,则可以将约束添加到列规范中
Create Table P4 (
i1 int not null Constraint PK_P4 Primary Key,
c1 varchar(255)
)
除最后一个示例外,上面的所有示例都支持主键中的多列,例如
Create Table P5 (
i1 int not null,
c1 varchar(20) not null,
c2 varchar(255),
Constraint PK_P5 Primary Key(i1, c1)
)
唯一约束可以以相同的方式添加,无论是在Create Table
语句中(如下所示)还是在Alter Table
语句中。
Create Table U1 (
a int not null,
b varchar(20) not null,
c varchar(20) not null,
Constraint U1_pk Primary Key (a),
Constraint U1_uc Unique (b)
)
go
可以在Create Table
语句中(如下所示)或通过Alter Table
语句将外键约束添加到表中。
Create Table F1 (
a int not null,
b varchar(20) not null,
c varchar(20) not null,
Constraint F1_pk Primary Key (a, b)
)
go
Create Table F2 (
i int not null,
a int not null,
b varchar(20) not null,
Constraint F2_pk Primary Key (i),
Constraint F2_fk1 Foreign Key (a, b) References F1 (a, b)
)
go
JET 4.0 引入了外键的级联更新和删除。当以Update Cascade
创建外键时,如果引用列发生更改,则外键也会更新。Delete Cascade
导致在删除引用行时删除引用行,而Delete Set Null
在删除引用行时将外键设置为 Null。
Create Table F5 (
i int not null,
a int not null,
b varchar(20) not null,
Constraint F5_pk Primary Key (i),
Constraint F5_fk1 Foreign Key (a, b) References F3 (a, b)
On Update Cascade On Delete Set Null
)
go
检查约束可以以几乎相同的方式添加。请注意,即使检查约束可能仅与一个特定列相关,但约束是在表级别声明的,而不是在列级别声明的
Create Table F6 (
i int not null,
a char(1) not null,
b decimal(15,2) not null,
c decimal(15,2) not null,
Constraint F6_pk Primary Key (i),
Constraint F6_chk_a check (a in ('Y','N')),
Constraint F6_chk_b check (b >= 0 And b <= 1000),
Constraint F6_chk_c check (c <= (Select Sum(a) From F5))
)
go
表索引有助于提高对表进行查询的性能,包括其他语句(如更新、删除和外键验证)中的隐式查询。通过发出Create Index
语句来创建表索引。
索引可以在每列中的值以升序(ASC
)或降序(DESC
)创建,即最小的值放在最前面或最大的值放在最前面。如果未指定,则索引将以每个索引列中的升序值创建。
以下语句创建了一个包含两个索引的表。第一个索引仅覆盖列b,但第二个索引同时覆盖列c和d。
Create Table I1 (
a int not null,
b varchar(20),
c varchar(20),
d varchar(20),
Constraint I1_pk Primary Key(a)
)
go
Create Index I1_idx1 On Table I1 (b)
go
Create Index I1_idx2 On Table I1 (c ASC, d DESC)
go
通过发出Drop Index
语句可以删除表索引。
Drop Index I1_idx1 On I1
通常,索引允许重复值。如果每行在索引列中必须具有唯一值,或在索引的列集中必须具有唯一的组合值,则可以将索引指定为唯一。这与添加唯一约束有类似的效果(实际上,这就是 JET 实现唯一约束的方式)。注意:空值不被视为值,因此如果允许唯一索引或唯一约束中的列为空值,则多行可能在该列中具有空值。
Create Table UI1 (
a int not null,
b varchar(20) not null,
c varchar(20) not null,
Constraint UI1_pk Primary Key (a)
)
go
Create Unique Index UI1_idx_ui On UI1 (c)
go
空值处理通常最好在表列上指定。但是,Create Index
语句也支持一个选项,不允许索引列中出现任何空值。
Create Index T5_idx1 On T5(c2) With Disallow Null
可以完全将索引列中具有空值的行排除在索引之外,使索引在磁盘上的物理大小更小,从而加快搜索速度。
Create Index T5_idx2 On T5(c1) With Ignore Null
可以通过使用特殊的With Primary
选项创建索引来指定表的primaryKey列。
通常最好使用Primary Key
约束指令创建主键,除非在主键列上创建索引时需要其他选项。一个这样的例子可能是当主键中的一列或多列应该以降序而不是升序索引时,出于性能原因。
Create Table P6 (
i1 int not null,
c1 varchar(20) not null,
c2 varchar(255)
)
go
Create Index P6_idx_pk On P6(i1 Desc) With Primary
go
删除不再需要的索引也很简单。指定索引名称以及索引所在的表。
Drop Index T5_idx2 On T5
go
当多个数据库用户(以及可选的组)被添加到数据库后,可以通过对单个对象授予或撤销权限来限制这些用户对数据库的访问权限。
JET 支持 ANSI SQL 标准中以下基本表权限(基本“CRUD”权限 - Create、Read、Update、Delete)
选择 | 从表中选择数据 |
删除 | 从表中删除数据 |
插入 | 将新数据插入表中 |
更新 | 更新表中的现有数据 |
Grant Select on T1 to SalesGroup
go
Grant Select, Insert, Update on T1 to AccountsGroup
go
Revoke Update on T1 from AccountsGroup
此外,JET 还支持以下表权限
所有权限 | 一次性授予或撤销所有权限 |
删除 | 删除表 |
SelectSecurity | 查看表上的权限(即其他授权) |
UpdateSecurity | 更新表上的权限 |
UpdateIdentity | 更改自动递增列中的值 |
SelectSchema | 查询表的结构 |
Schema | 更新表的结构 |
UpdateOwner | 更改表的拥有者 |