### Oracle SQL 指令详解
#### 创建与管理表空间
在Oracle数据库中,表空间是存储数据的逻辑容器,创建表空间对于数据库管理至关重要。
1. **创建表空间**
- 使用`CREATE TABLESPACE`语句创建表空间,需指定表空间名称、数据文件路径、初始大小、自动扩展选项、扩展大小以及最大尺寸。
- 示例:`CREATE TABLESPACE user1 DATAFILE 'f:\oracle\wuzheren\user1_data.dbf' SIZE 10M AUTOEXTEND ON (OFF) NEXT 2M MAXSIZE 30M (UNLIMITED);`
- 注意:括号内的`(OFF)`和`(UNLIMITED)`为可选项,分别控制自动扩展的开关和最大尺寸是否受限。
2. **检查表空间状态**
- `SELECT file_name, tablespace_name FROM dba_data_files ORDER BY file_name;`
- 此命令用于确认表空间创建是否成功及数据文件的基本信息。
- `SELECT tablespace_name, status, allocation_type FROM dba_tablespaces;`
- 查看所有表空间的状态和分配类型。
3. **删除表空间**
- 使用`DROP TABLESPACE`语句删除表空间,若包含数据文件,需使用`INCLUDING CONTENTS AND DATAFILES`选项。
- 示例:`DROP TABLESPACE user1 INCLUDING CONTENTS AND DATAFILES;`
4. **查看所有表空间信息**
- 重复使用`SELECT tablespace_name, status, allocation_type FROM dba_tablespaces;`,此查询提供了全面的表空间视图。
5. **查询用户默认表空间**
- 使用`SELECT user_id, username, default_tablespace FROM dba_users;`来查看每个用户的默认表空间设置。
6. **修改数据库默认表空间**
- 使用`ALTER DATABASE DEFAULT TABLESPACE`语句修改整个数据库的默认表空间。
- 示例:`ALTER DATABASE DEFAULT TABLESPACE user1;`
7. **修改表空间名称**
- 可通过`ALTER TABLESPACE`语句更改表空间名称,但不会影响其数据文件。
- 示例:`ALTER TABLESPACE user1 RENAME TO user10;`
- 注意:系统表空间不可重命名。
#### 创建与管理数据表
1. **创建数据表**
- 使用`CREATE TABLE`语句定义数据表结构,包括字段名和数据类型。
- 示例:`CREATE TABLE t_user (user_id NUMBER NOT NULL, user_name VARCHAR2(20) NOT NULL, user_email VARCHAR2(20));`
2. **查看数据表所属表空间**
- `SELECT table_name, tablespace_name FROM user_tables WHERE table_name = 't_user';`
- 此命令帮助确认数据表的存储位置。
3. **描述数据表信息**
- 使用`DESCRIBE`语句查看数据表的字段详情。
- 示例:`DESCRIBE t_user;`
4. **修改数据表结构**
- 重命名列:`ALTER TABLE t_user RENAME COLUMN user_email TO email;`
- 修改列属性:`ALTER TABLE t_user MODIFY (user_name VARCHAR2(20), user_email VARCHAR2(30));`
5. **为表添加新列**
- 使用`ALTER TABLE ... ADD`语句。
- 示例:`ALTER TABLE t_user ADD (beizhu VARCHAR2(10));`
6. **删除数据表中的列**
- 需使用`ALTER TABLE ... DROP COLUMN`语句,并明确指定`COLUMN`关键字。
- 示例:`ALTER TABLE t_user DROP COLUMN remark;`
7. **重命名数据表**
- 警告:重命名数据表可能影响依赖于该表的应用程序。
- 示例:`ALTER TABLE t_user RENAME TO t_users;`
8. **删除数据表**
- 使用`DROP TABLE`语句。
- 示例:`DROP TABLE t_user;`
9. **删除表约束**
- `DROP TABLE t_user CASCADE CONSTRAINTS;`
- 这一命令将删除表及其所有约束。
#### 临时表
临时表是在会话期间使用的特殊表,分为会话级和事务级两种。
1. **会话级临时表**
- 创建时指定`ON COMMIT PRESERVE ROWS`,表示在事务提交后保留数据。
- 示例:`CREATE GLOBAL TEMPORARY TABLE tmp_user_session (user_id INT, user_name VARCHAR2(20), user_email VARCHAR2(30)) ON COMMIT PRESERVE ROWS;`
2. **事务级临时表**
- 创建时使用`ON COMMIT DELETE ROWS`,表示在事务提交后删除所有数据。
- 示例:`CREATE GLOBAL TEMPORARY TABLE tut (id INT, name VARCHAR2(20), email VARCHAR2(30)) ON COMMIT DELETE ROWS;`
- 注意:临时表只在创建它们的会话中可见,且事务结束后数据会被清除。
以上指令覆盖了Oracle数据库中表空间和数据表的基本管理操作,以及临时表的使用场景,对于数据库管理员和开发人员来说,熟练掌握这些SQL语句是必不可少的技能。