Oracle 创建表空间,创建表、数据增删改

本文详细介绍了如何在Oracle中创建表空间,创建用户并分配权限,以及进行表的创建、修改、删除操作。涵盖了数据类型选择、表空间指定、SQL语句实例和truncat与delete的区别。

创建表空间

-- 创建表空间
-- testds 为表空间名称
-- datafile 用于设置物理文件名称
-- size 用于设置表空间的初始大小
-- autoextend on 用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
-- next 用于设置扩容的空间大小
create tablespace testds datafile 'C:\Users\16837\Desktop\test\testdf.dbf'
size 100m
autoextend on next 10m;

创建用户

-- 创建用户
-- user 设置用户名
-- identified by 用于设置用户的密码
-- default tablesapce 用于指定默认表空间名称
create user testds 
identified by testds
default tablespace testds;

用户授权

-- 用户授权
-- 给用户 testds 赋予 DBA 权限后即可登陆
grant dba to testds;

使用账号testds登录
在这里插入图片描述
登录成功后的界面
在这里插入图片描述

表的创建、修改与删除

创建表

语法:
在这里插入图片描述

数据类型

字符型

  • CHAR : 固定长度的字符类型,最多存储 2000 个字节
  • VARCHAR2 :可变长度的字符类型,最多存储 4000 个字节
  • LONG : 大文本类型。最大可以存储 2 个 G
    数值型
    NUMBER : 数值类型
    例如:NUMBER(5) 最大可以存的数为 99999
    NUMBER(5,2) 最大可以存的数为 999.99
    日期型
  • DATE:日期时间型,精确到秒
  • TIMESTAMP:精确到秒的小数点后 9 位
    二进制型(大数据类型)
  • CLOB : 存储字符,最大可以存 4 个 G
  • BLOB:存储图像、声音、视频等二进制数据,最多可以存 4 个 G
--创建业主表
CREATE TABLE T_OWNERS(
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(30),
ADDRESSID NUMBER,
HOUSENUMBER VARCHAR2(30),
WATERMETER VARCHAR2(30),
ADDDATE DATE,
OWNERTYPEID NUMBER
)

用账号testds和密码testds登录,创建表成功后,在表空间testds看见新建的表
在这里插入图片描述

创建表的同时指定表空间

create table test0531(id number)
tablespace testds;

修改表

增加字段语法:
在这里插入图片描述

--为业主表增加两个字段,语句:
alter table t_owners add (
remark varchar2(20),
outdate date
);
  1. 修改字段语法:
    在这里插入图片描述
-- 修改字段
alter table t_owners modify (
remark char(20),
outdate timestamp
);
  1. 修改字段名语法:
    在这里插入图片描述
-- 修改列outdate名称为exitdate
alter table t_owners rename column outdate to exitdate;
  1. 删除字段名
    在这里插入图片描述
-- 删除表t_owners中的列remark
alter table t_owners drop column remark;

删除表

语法:
在这里插入图片描述

数据增删改

插入数据

语法:

insert into 表名(列名,列名2) values (1,值2);

也可以简写为

-- 插入的值分别对于数据库中列的顺序
insert into 表名 values(1,值2);

执行 INSERT 后一定要再执行 commit 提交事务
向业主表插入数据:

-- 向业主表插入数据:
insert into t_owners values(1,'张三丰',1,'2-2','5678',sysdate,1);

语句中的 sysdate 是系统变量用于获取当前日期,点击齿轮的图标后,再点击下
图的绿色图标,此图标为 commit
在这里插入图片描述
我们再次录入一条数据,语句如下:

insert into T_OWNERS VALUES (2,'赵大侃
',1,'2-3','9876',sysdate,1);
commit;

修改数据

语法:

UPDATE 表名 SET 列名 1=1,列名 2=2....WHERE 修改条件;

执行 UPDATE 后一定要再执行 commit 提交事务

-- 将 ID 为 1 的业主的watermeter更改为3
update t_owners t set t.watermeter=3 where t.id=1;
commit;

删除数据

语法:

delete from 表名 where 删除条件;

执行 DELETE 后一定要再执行 commit 提交事务

-- 删除业主 ID 为 2 的业主信息
delete from t_owners where id =2;

语法 2:

TRUNCATE TABLE 表名称

比较 truncat 与 delete 实现数据删除?

  1. delete 删除的数据可以 rollback
  2. delete 删除可能产生碎片,并且不释放空间
  3. truncate 是先摧毁表结构,再重构表结构
<think>我们正在讨论Oracle数据库创建索引的方法。根据引用内容,我们可以总结出创建索引的基本语法和步骤。 首先,创建索引可以使用CREATE INDEX语句,也可以在使用ALTER TABLE语句时添加约束(如主键或唯一约束)来隐式创建索引。 引用[1]提到了一些建立索引的规则,例如主键、外键必须有索引,数据量大的应该有索引等。 引用[2]展示了在创建设置主键索引的语句,其中主键约束会隐式创建一个索引。 引用[3]则展示了通过ALTER TABLE语句添加主键索引和通过CREATE INDEX语句创建唯一索引的例子,并说明了在创建索引前需要确保数据满足约束条件(如主键不能重复)。 创建索引的步骤: 1. 确定需要创建索引的列(根据查询需求、连接、WHERE子句等)。 2. 确保数据满足索引约束(如唯一索引要求列值唯一,主键索引要求非空且唯一)。 3. 使用CREATE INDEX语句创建索引,或者通过添加约束来创建索引。 语法: 1. 使用CREATE INDEX创建普通索引或唯一索引: - 普通索引:CREATE INDEX 索引名 ON 名 (列名1, 列名2, ...); - 唯一索引:CREATE UNIQUE INDEX 索引名 ON 名 (列名1, 列名2, ...); 2. 在创建时定义主键(会隐式创建主键索引): CREATE TABLE 名 ( 列名 数据类型, ..., CONSTRAINT 约束名 PRIMARY KEY (列名) ); 3. 通过ALTER TABLE添加主键(隐式创建索引): ALTER TABLE 名 ADD CONSTRAINT 约束名 PRIMARY KEY (列名); 4. 通过ALTER TABLE添加唯一约束(也会隐式创建唯一索引): ALTER TABLE 名 ADD CONSTRAINT 约束名 UNIQUE (列名); 注意:在Oracle中,主键约束和唯一约束会自动创建一个唯一索引。如果已有索引,可能会利用现有索引(但需满足条件)。 另外,引用[3]中提到了在创建索引前如果数据有重复,需要先处理数据(删除重复或修改数据),否则创建会失败。 示例: 1. 创建一个普通索引(非唯一)在employees的last_name列上: ```sql CREATE INDEX idx_emp_lastname ON employees(last_name); ``` 2. 创建一个唯一索引在employees的email列上: ```sql CREATE UNIQUE INDEX idx_emp_email ON employees(email); ``` 3. 通过ALTER TABLE添加主键(在departments的department_id列上): ```sql ALTER TABLE departments ADD CONSTRAINT pk_dept PRIMARY KEY (department_id); ``` 4. 在创建时定义主键: ```sql CREATE TABLE departments ( department_id NUMBER(4) PRIMARY KEY, -- 这里可以省略约束名,系统会自动生成 department_name VARCHAR2(30) ); ``` 或者指定约束名: ```sql CREATE TABLE departments ( department_id NUMBER(4), department_name VARCHAR2(30), CONSTRAINT pk_dept PRIMARY KEY (department_id) ); ``` 注意事项: - 索引名在同一个用户下必须唯一。 - 创建索引可能需要一定的系统资源,对于大,可以考虑在系统负载低的时候进行。 - 索引虽然能提高查询速度,但会降低DML(INSERT、UPDATE、DELETE)操作的速度,因为索引也需要维护。 根据引用[3]的示例,在创建索引之前,要确保数据不违反约束条件。例如,在创建主键索引前,如果中已有数据,需要保证主键列的值非空且唯一。 最后,我们还可以通过查询数据字典视图(如USER_INDEXES、USER_IND_COLUMNS)来查看已创建的索引信息。 相关问题: 1. 如何删除Oracle中的索引? 2. 如何查看Oracle上已有的索引? 3. Oracle索引的类型有哪些?它们有什么区别? 4. 在Oracle中,索引组织(IOT)和普通有什么区别?</think>### Oracle数据库创建索引的方法 #### 一、索引创建语法 1. **显式创建索引** ```sql CREATE [UNIQUE] INDEX 索引名 ON 名 (列名1, 列名2, ...); ``` - `UNIQUE`:创建唯一索引(值必须唯一) - 示例:`CREATE INDEX idx_emp_name ON employees(last_name);` 2. **通过约束隐式创建索引** - 主键约束自动创建唯一索引: ```sql ALTER TABLE 名 ADD CONSTRAINT 约束名 PRIMARY KEY (列名); ``` 示例:`ALTER TABLE departments ADD CONSTRAINT pk_dept PRIMARY KEY (dept_id);` - 唯一约束自动创建唯一索引: ```sql ALTER TABLE 名 ADD CONSTRAINT 约束名 UNIQUE (列名); ``` #### 二、创建步骤 1. **确认索引需求** - 根据引用[1]的规则: - 主键/外键必须建索引 - WHERE子句频繁使用的列 - 连接字段 - 数据量超过300行的 2. **检查数据合规性** - 创建唯一索引或主键前,需确保数据无重复: ```sql SELECT 列名, COUNT(*) FROM 名 GROUP BY 列名 HAVING COUNT(*) > 1; ``` - 若存在重复数据,需先清理(如引用[3]的`DELETE`操作) 3. **执行创建语句** ```sql -- 单列索引 CREATE INDEX idx_user_name ON users(name); -- 组合索引 CREATE INDEX idx_emp_dept ON employees(dept_id, hire_date); -- 唯一索引 CREATE UNIQUE INDEX uq_user_email ON users(email); ``` #### 三、注意事项 1. **命名规范** - 索引名需唯一(引用[2]允许索引名与名相同) - 建议命名规则:`idx_名_列名` 2. **空间与性能** - 索引占用存储空间 - 增删改操作会降低性能(需维护索引) 3. **错误处理** - `ORA-02437`:主键冲突(引用[3]示例) - `ORA-00001`:唯一约束冲突 - 解决方法:清理重复数据或修改索引列 #### 四、索引管理 - **查看索引**: ```sql SELECT index_name, column_name FROM user_ind_columns WHERE table_name = '名'; ``` - **重建索引**: ```sql ALTER INDEX 索引名 REBUILD; ``` - **删除索引**: ```sql DROP INDEX 索引名; ``` > **最佳实践**:对于频繁查询但更新少的创建索引;避免在小或NULL值过多的列建索引[^1]。 --- ### 相关问题 1. 如何判断Oracle索引是否被查询使用? 2. 索引重建(REBUILD)在什么场景下需要执行? 3. 组合索引的列顺序如何影响查询性能? 4. 如何监控Oracle索引的使用效率? [^1]: oracle及索引的语句,oracle重建索引语句。Oracle 建立索引常用的规则如下: 1、的主键、外键必须有索引; 2、数据量超过 300 的应该有索引; 3、经常与其他进行连接的,在连接字段上应该建立索引; 4、经常出现在 Where 子句中的字段,特别是大的字段,应该建立索引; ...... [^2]: Oracle 创建设置主键索引的时候,索引名称可以跟名称相同,例如这个建语句: CREATE TABLE MY_TABLE_1( field_a VARCHAR2(32), field_b VARCHAR2(50), field_c VARCHAR2(255), field_d VARCHAR2(32), field_e VARCHAR2(2), constraint MY_TABLE_1 primary key(field_a) ) ; [^3]: 【oracleoracle创建创建索引、创建自增id。针对上述问题我们为创建索引。分别对id创建主键索引和对name创建唯一索引 SQL> alter table test_user add primary key(id); alter table test_user add primary key(id) ORA-02437: cannot validate (AMBASE.SYS_C0020453) - primary key violated ### 因为存在主键冲突的数据了 所以先把数据清除了 SQL> delete test_user; 3 rows deleted SQL> alter table test_user add primary key(id); Table altered SQL> create UNIQUE index un_name on test_user(name); Index created
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值