SQL常用语句的BNF语法速览
立即解锁
发布时间: 2025-08-23 00:22:12 阅读量: 2 订阅数: 8 

### SQL 常用语句的 BNF 语法速览
在数据库操作中,SQL 语句是核心工具。本文将介绍一些常见 SQL 操作的 BNF 语法,涵盖数据库管理、表空间管理、表管理、索引管理、数据操作、事务管理、查询构建、逻辑视图管理以及系统安全管理等方面。
#### 1. 数据库管理
数据库管理主要涉及数据库的创建和修改操作。
##### 1.1 创建数据库
创建数据库的语法如下:
```plaintext
Create-Database ::=
CREATE DATABASE <DatabaseName>
[USER SYS IDENTIFIED BY <Password> ]
[USER SYSTEM IDENTIFIED BY <Password>]
[CONTROLFILE REUSE]
[LOGFILE [GROUP <n> (<FileSpec> {,<FileSpec>})
{ GROUP <n> (<FileSpec> {,<FileSpec>})}
[MAXLOGFILES <n>] [MAXLOGMEMBERS <n>] [MAXLOGHISTORY <n>]
[MAXDATAFILES <n>] [MAXINSTANCES <n>]
[ARCHIVELOG|NOARCHIVELOG] [FORCE LOGGING]
[CHARACTER SET <Charset>] [NATIONAL CHARACTER SET <Charset>]
[DATAFILE <FileSpec> [<Auto-extend-Clause>] {, <FileSpec> [<Auto-extend-Clause>]}
[EXTENT MANAGEMENT LOCAL]
[<Default-temporary-tablespace-Clause>]
[<Undo-tablespace-Clause>]
[Set-Time-Zone-Clause]
```
其中,`FileSpec` 是物理操作系统文件的路径,`Auto_Extend-Clause` 用于设置文件自动扩展的规则,`Default-temporary-tablespace-Clause` 用于指定默认临时表空间,`Undo-tablespace-Clause` 用于指定撤销表空间,`Set-Time-Zone-Clause` 用于设置时区。
需要注意的是:
- 如果指定了本地管理的表空间(`EXTENT MANAGEMENT LOCAL`),则必须指定默认临时表空间。
- 如果指定了本地管理的表空间和数据文件子句,则必须指定默认临时表空间和该表空间的数据文件。
- 如果指定了本地管理的表空间但未指定数据文件子句,则可以省略默认临时表空间子句,Oracle 将创建一个名为 `TEMP` 的临时表空间,数据文件大小为 10M。
- 默认临时表空间大小为 1M。
- 如果未指定日志文件子句,Oracle 将创建两个大小为 100M 的日志文件。
- 时区可以指定为相对于标准 GMT 的小时和分钟数,或者使用预定义的时区名称。
##### 1.2 修改数据库
修改数据库的语法如下:
```plaintext
Alter-Database ::=
Alter Database [<DatabaseName>]
Startup-Clauses | Recovery-Clauses | Datafile-Clauses | Logfile-Clauses | Controlfile-Clauses |
Standby-Database-Clauses | Default-Settings-Clauses | Conversion-Clauses |
Redo-Thread-Clauses | Security-Clause;
```
其中,`Startup-Clauses` 用于启动数据库,`Recovery-Clauses` 用于数据库恢复,`Datafile-Clauses` 用于管理数据文件,`Logfile-Clauses` 用于管理日志文件,`Controlfile-Clauses` 用于管理控制文件,`Standby-Database-Clauses` 用于管理备用数据库,`Default-Settings-Clauses` 用于设置默认参数,`Conversion-Clauses` 用于数据库转换,`Redo-Thread-Clauses` 用于管理重做线程,`Security-Clause` 用于设置数据库安全。
以下是一个修改数据库的示例:
```sql
ALTER DATABASE SampleDB MOUNT;
ALTER DATABASE SampleDB READ ONLY;
ALTER DATABASE SampleDB Backup Controlfile To TRACE AS ‘C:\Oracle\EFDB06\SampleTrace’;
```
#### 2. 表空间管理
表空间管理主要涉及表空间的创建和修改操作。
##### 2.1 创建表空间
创建表空间的语法如下:
```plaintext
Create-Tablespace::=
CREATE [BIGFILE | SMALLFILE] <Permanent-Tablespace-Clause> | <Temporary-Tablespace-
Clause> |
<Undo-Tablespace-Clause>;
```
其中,`Permanent-Tablespace-Clause` 用于创建永久表空间,`Temporary-Tablespace-Clause` 用于创建临时表空间,`Undo-Tablespace-Clause` 用于创建撤销表空间。
不同类型的表空间有不同的子句,例如永久表空间的子句如下:
```plaintext
Permanent-Tablespace-Clause ::=
TABLESPACE <TablespaceName>
[DATAFILE <FileSpec> {, <FileSpec>}]
[MINIMUM EXTENT <n> [K|M|G|T|P|E]] /*NA if locally managed; see Extent-Management-Clause */
[BLOCKSIZE <n> [K]]
[LOGGING | NOLOGGING] [FORCE LOGGING] [ONLINE | OFFLINE]
[DEFAULT] [COMPRESS | NOCOMPRESS] <Storage-Clause>]
[<Extent-Management-Clause>]
[<Segment-Management-Clause>]
[FLASHBACK ON|OFF]
```
临时表空间的子句如下:
```plaintext
Temporary-Tablespace-Clause ::=
TEMPORARY TABLESPACE <TablespaceName>
[TEMPFILE <FileSpec> {,<FileSpec>}]
[TABLESPACE GROUP <TablespaceGroupName> | ‘ ‘]
[<Extent-Management-Clause>]
```
撤销表空间的子句如下:
```plaintext
Undo-Tablespace-Clause ::=
UNDO TABLESPACE <TablespaceName>
[DATAFILE <FileSpec> {,<FileSpec>}]
[<Extent-Management-Clause>]
[RETENTION GUARANTEE | NONGUARANTEE]
```
##### 2.2 修改表空间
修改表空间的语法如下:
```plaintext
Alter-Tablespace::=
ALTER TABLESPACE <TablespaceName>
[DEFAULT [COMPRESS | NOCOMPRESS] <Storage-Clause>]
[MINIMUM EXTENT <n> K|M|G|T|P|E]
[RESIZE <n> K|M|G|T|P|E] [COALESCE]
[SHRINK SPACE [KEEP <n> K|M|G|T|P|E]]
[RENAME TO <NewTablespaceName>]
[BEGIN | END BACKUP]
[<Datafile-Tempfile-Clauses>]
[<Tablespace-Logging-Clause>]
[TABLESPACE GROUP <TablespaceGroupName> | ‘ ‘]
[<Tablespace-State-Clause>]
[<Autoextend-Clause>]
[FLASHBACK ON | OFF]
[<Tablespace-Retention-Clause>];
```
其中,`Datafile-Tempfile-Clauses` 用于管理数据文件和临时文件,`Tablespace-Logging-Clause` 用于设置表空间的日志记录,`Tablespace-State-Clause` 用于设置表空间的状态,`Autoextend-Clause` 用于设置文件自动扩展,`Tablespace-Retention-Clause` 用于设置表空间的保留策略。
#### 3. 表管理
表管理主要涉及表的创建和修改操作。
##### 3.1 创建表
创建表的语法如下:
```plaintext
Create-Table::=
Create-Relational-Table | Create-Object-Table | Create-XML-Table
```
其中,`Create-Relational-Table` 用于创建关系表,`Create-Object-Table` 用于创建对象表,`Create-XML-Table` 用于创建 XML 表。
关系表的创建语法如下:
```plaintext
Create-Relational-Table ::=
CREATE [GLOBAL TEMPORARY] TABLE [<Schema>·] <TableName> [(Relational-Properties)]
[ON COMMIT DELETE | PRESERVE ROWS]
[Physical-Properties Table-Properties] [Storage-clause];
```
其中,`Relational-Properties` 用于定义表的列和约束,`Physical-Properties` 用于定义表的物理属性,`Table-Properties` 用于定义表的其他属性,`Storage-clause` 用于定义表的存储参数。
对象表的创建语法如下:
```plaintext
Create-Object-Table ::=
CREATE [GLOBAL TEMPORARY] TABLE [<SCHEMA>·]
<TableName> OF [<Schema>·] <Object-Type>
[Object-Table-Substitution]
[(Object-Properties)] [ON COMMIT DELETE | PRESERVE ROWS]
[OID-Clause] [OID-Index-Clause]
[Physical-Properties] [Table-Properties];
```
XML 表的创建语法如下:
```plaintext
Create- XML-Table ::=
CREATE TABLE [<Schema>·] <TableName> OF XMLTYPE
[XMLTYPE XML-Type-Storage] [XML-Schema-Spec]
```
##### 3.2 修改表
修改表的语法如下:
```plaintext
Alter-Table ::=
ALTER TABLE [<Schema>.] <Table-Name>
[Alter-Table-Props | Column-Clauses | Constraint-Clauses | Alter-Table-Partitioning | Alter-External-
Table-Clauses |
Move-Table-Clause]
[Enable-Disable-Clause] | [ENABLE | DISABLE TABLE LOCK] | [ENABLE | DISABLE ALL
TRIGGERS];
```
其中,`Alter-Table-Props` 用于修改表的属性,`Column-Clauses` 用于管理表的列,`Constraint-Clauses` 用于管理表的约束,`Alter-Table-Partitioning` 用于管理表的分区,`Alter-External-Table-Clauses` 用于管理外部表,`Move-Table-Clause` 用于移动表,`Enable-Disable-Clause` 用于启用或禁用约束和触发器。
#### 4. 索引管理
索引管理主要涉及索引的创建和修改操作。
##### 4.1 创建索引
创建索引的语法如下:
```plaintext
Create-Index ::=
CREATE [UNIQUE | BITMAP] INDEX [<Schema>·] <IndexName>
ON Cluster-Index-Clause | Table-Index-Clause | Bitmap-Join-Index-Clause;
```
其中,`Cluster-Index-Clause` 用于在集群上创建索引,`Table-Index-Clause` 用于在表上创建索引,`Bitmap-Join-Index-Clause` 用于创建位图连接索引。
不同类型的索引有不同的子句,例如表索引的子句如下:
```plaintext
Table-Index-Clause ::=
[<Schema>·] <Table> [<Table-Alias>]
( Index-Expr [ASC/DESC] {,Index-Expr [ASC/DESC] } )
[Global-Partitioned-Index | Local-Partitioned-Index] [Index-Attributes] [Domain-Index-Clause]
```
其中,`Index-Expr` 可以是列或列表达式,`Global-Partitioned-Index` 用于创建全局分区索引,`Local-Partitioned-Index` 用于创建本地分区索引,`Index-Attributes` 用于定义索引的属性,`Domain-Index-Clause` 用于创建域索引。
##### 4.2 修改索引
修改索引的语法如下:
```plaintext
Alter-Index ::=
ALTER INDEX [<Schema>·]<IndexName>
{Deallocate-U
```
0
0
复制全文
相关推荐










