跳转到内容

JET 数据库/数据定义语言

来自维基教科书,自由的教科书
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 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,但第二个索引同时覆盖列cd

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 更改表的拥有者
华夏公益教科书