oracle表和对象基础维护笔记

一 oracle表和对象基础维护笔记

1.1 常见概念

1.2 创建表

1.3 表常见字段

1.4 增加或删除字段

1.5 更新字段

1.6 重命名表

1.7 改变表存储表空间和存储参数

1.8 删除表

1.9 表注释

1.10 分区表的管理

1.11 常用数据字典

二 约束

2.1 非空约束

2.2 主键约束

2.3 唯一性约束

2.4 外键约束

2.5 约束管理

三 索引

3.2 创建索引

3.3 改变索引存储参数

3.4 重建索引

3.5 索引碎片整理

3.6 删除索引

3.7 数据字典

四 视图

4.1 建立视图

4.2 视图授权

4.3 删除视图

五 同义词

5.1 创建同义词

5.2删除同义词

六 序列

6.1 建立序列

6.2 删除序列

1.1 常见概念

表命名规范:不能超过30个字,只能有数字,字母,_,#组成,$

1.2 创建表

create table [schema.]table
(column datatype [default expr]);

使用子查询创建表

create
table table

[(column,column…)]

as
subquery;

---创建表

create table cw1(

name varchar2(25)
not null,

id number

)

insert into
cw1(name,id) values(‘cw‘,1);

create
table cw2

as select
* from cw1;

1.3 表常见字段

varchar2(size)  最大4000字节

char(size)   最大2000字节

number(p[,s])   p总长度,s小数位

date

long    最大可到2G

CLOB   最大可以到4G

RAW and LONG
RAW   二进制数据,最大2000字节,2G

BLOB  二进制数据,最大可达到4G

BFILE   存储外部文件的二进制数据,最大可达到4G

ROWID   行地址

create table cw3(

name varchar2(10),

sex char(4),

deptid number(10),

create_date date,

card_id long,

picture blob,

file_id bfile)

--插入数据

insert into
cw2(name,id,age,cardid) values(‘cw1‘,3,19,‘12345‘);

insert into
cw2(name,id,age,cardid) values(‘cw1‘,4,20,‘242345‘);

insert into
cw2(name,id,age,cardid) values(‘cw1‘,5,21,‘123322225‘);

insert into
cw2(name,id,age,cardid) values(‘cw1‘,6,22,‘1242234545‘);

insert into
cw2(name,id,age,cardid) values(‘cw1‘,7,23,‘1252342345‘);

insert into
cw2(name,id,age,cardid) values(‘cw1‘,8,24,‘124234245‘);

insert into
cw2(name,id,age,cardid) values(‘cw1‘,9,25,‘133223445‘);

insert into
cw2(name,id,age,cardid) values(‘cw1‘,10,26,‘32123345‘);

1.4 增加或删除字段

alter
table employees add(age number(2));

--添加字段

alter table cw2  add(age number(2));

alter table cw2  add(cardid varchar(10));

--删除字段

alter table cw2
drop(cardid );

1.5 更新字段

alter
table table_name modify column_name type;

--更改表字段:

alter table cw2
modify(age char(10));

---如果表里面存在数据,需要修改为其它类型数据,会报错

SQL> alter table
cw2 modify(age char(10));

alter table cw2
modify(age char(10))

ORA-01439: column to
be modified must be empty to change datatype

SQL>

---更改同类数据类型正常

SQL> alter table
cw2 modify(age number(10));

Table altered

SQL>

注意:如果是需要修改数据字段类型,需要先处理表里面数据,然后再更改类型。

1.这种方法能满足需求,因新增字段默认添加到表末尾,有可能发生行迁移,对应用程序会产生影响

2.第二种方法,是增加一个与被修改的列类型一样的列,之后将要修改列的数据复制到新增的列并置空要修改的列,之后修改数据类型,再从新增列将数据拷贝回来,该过程涉及两次数据复制,如果是数据量很多,会比较慢同时也会产生很多undo和redo;优点是数据不会发生行迁移。

1.6 重命名表

alter
table  XXX RENAME to  xxxxx;

----重命名表

SQL> alter table
cw2 rename to cw4;

Table altered

SQL>

---如果带schema,那么会报错,需要去掉后面的schema

SQL> alter table
system.cw4 rename to system.cw2;

alter table
system.cw4 rename to system.cw2

ORA-14047: ALTER
TABLE|INDEX RENAME may not be combined with other operations

SQL>

---带schema更改如下:

SQL> alter table
system.cw4 rename to cw2;

Table altered

SQL>

1.7 改变表存储表空间和存储参数

1.8 删除表

删除表:drop table_name;

SQL> drop table
system.cw2;

Table dropped

SQL>

删除表数据:

truncate

delete

区别:1.truncate无法rollback

2.truncate 不能触发任何delete触发器

-----delete删除数据

SQL> select *
from cw3;

NAME                     ID AGE   CARDID

--------------------
------ ----- ----------

cw1                       3 19    12345

cw1                       4 20    242345

cw1                       5 21    123322225

cw1                       6 22    1242234545

cw1                       7 23    1252342345

cw1                       8 24    124234245

cw1                       9 25    133223445

cw1                      10 26    32123345

8 rows selected

SQL> delete from
cw3;

8 rows deleted

SQL> select *
from cw3;

NAME                     ID AGE   CARDID

--------------------
------ ----- ----------

SQL> rollback;

Rollback complete

SQL> select *
from cw3;

NAME                     ID AGE   CARDID

--------------------
------ ----- ----------

cw1                       3 19    12345

cw1                       4 20    242345

cw1                       5 21    123322225

cw1                       6 22    1242234545

cw1                       7 23    1252342345

cw1                       8 24    124234245

cw1                       9 25    133223445

cw1                      10 26    32123345

8 rows selected

SQL>

----delete

----truncate删除数据

SQL> truncate
table cw3;

Table truncated

SQL> rollback;

Rollback complete

SQL> select *
from cw3;

NAME                     ID AGE   CARDID

--------------------
------ ----- ----------

SQL>

----truncate

1.9 表注释

comment on table employees IS ‘测试‘;

---添加表测试记录

SQL> comment on table cw3 is ‘测试‘;

Comment added

SQL> desc cw3;

Name   Type        
Nullable Default Comments

------ ------------
-------- ------- --------

NAME   VARCHAR2(20) Y

ID     NUMBER(5)    Y

AGE    CHAR(5)     
Y

CARDID VARCHAR2(10)
Y

SQL> select *
from dba_tab_comments where table_name=‘CW3‘;

OWNER                          TABLE_NAME                     TABLE_TYPE  COMMENTS

------------------------------
------------------------------ -----------
--------------------------------------------------------------------------------

SYSTEM                         CW3                            TABLE       测试

SQL>

1.10 分区表的管理

分区表的有点:

分区表的分区方法:

范围分区:

hash分区

列表分区

复合分区(范围+hash)(范围+列表)

create table cw_part1(

name varchar(20),

id number(5),

age char(5),

cardid varchar(10))

partition
by range(age)

(partition
age_1 values less than (22),

partition
age_2 values less than(24),

partition
age_3 values less than(26))

as select
name,id,age,cardid from cw2;

----分区表

SQL> select *
from cw_part partition(age_3);

NAME                     ID AGE   CARDID

--------------------
------ ----- ----------

SQL> insert into
cw_part(name,id,age,cardid) values(‘cw2‘,11,25,‘232432‘);

1 row inserted

SQL> select *
from cw_part partition(age_3);

NAME                     ID AGE   CARDID

--------------------
------ ----- ----------

cw2                      11 25    232432

SQL> select *
from cw_part partition(age_1);

NAME                     ID AGE   CARDID

--------------------
------ ----- ----------

cw2                      11 20    232432

SQL> select *
from cw_part partition(age_2);

NAME                     ID AGE   CARDID

--------------------
------ ----- ----------

SQL> select *
from cw_part partition(age_3);

NAME                     ID AGE   CARDID

--------------------
------ ----- ----------

cw2                      11 25    232432

----分区表

1.11 常用数据字典

all_col_comments

user_col_comments

all_tab_comments

user_tab_comments

二 约束

2.1 非空约束

not null

--添加非空

SQL> alter table
cw2 add(key varchar(2) not null);

alter table cw2
add(key varchar(2) not null)

ORA-01758: table
must be empty to add mandatory (NOT NULL) column

SQL> select *
from cw1;

NAME                              ID

-------------------------
----------

cw                                 1

SQL> truncate
cw1;

truncate cw1

ORA-03290: Invalid
truncate command - missing CLUSTER or TABLE keyword

SQL> truncate
table cw1;

Table truncated

---如果表为空,那么可以添加成功

SQL> alter table
cw1 add(key varchar(2) not null);

Table altered

SQL>

---

2.2 主键约束

primary
key

create
table cw(name varchar constraint pk_name primary key,id number);

----添加主键

SQL> alter table
cw2 modify(id number(5) primary key);

Table altered

SQL> select *
from cw2;

NAME                     ID AGE   CARDID

--------------------
------ ----- ----------

cw1                       3 19    12345

cw1                       4 20    242345

cw1                       5 21    123322225

cw1                       6 22    1242234545

cw1                       7 23    1252342345

cw1                       8 24    124234245

cw1                       9 25    133223445

cw1                      10 26    32123345

8 rows selected

SQL> insert into
cw2(id) values(5);

insert into cw2(id)
values(5)

ORA-00001: unique
constraint (SYSTEM.SYS_C006975) violated

SQL>

----

2.3 唯一性约束

unique

create
table cw(name varchar 2(20),

id number

constraint
unique_name unique(name)

);

-----唯一索引

SQL> create
unique index unique_age on cw2(age);

Index created

SQL> insert into
cw2(id,age) values(11,20);

insert into
cw2(id,age) values(11,20)

ORA-00001: unique
constraint (SYSTEM.UNIQUE_AGE) violated

SQL>

----

2.4 外键约束

foreign
key

create
table cw(

id
number,

name
varchar2(20)

constraint
fk_cw foreign key(id) references dept(id)

);

2.5 约束管理

修改

alter
table cw drop constraint  unique_name;

alter
table cw add constraint  unique_name
unique(name);

停止启用

alter table cw disable
constraint unique_name;

alter
table cw enable constraint constraint_name;

-----约束停止

-----

三 索引

3.1 索引概述

索引的有点:
 加快查询,减少Io操作,消除磁盘排序

索引种类:

唯一索引

位图索引

散列索引

函数索引

3.2 创建索引

创建索引时,需要制定索引参数

create index
index_name on table_name(field_name)

  tablespace
tablespace_name

  pctfree 5

  initrans 2

  maxtrans 255

  storage

  (

  minextents 1

  maxextents
16382

  pctincrease 0

  );

tablespace 表空间 --指定建立对象的表空间 pctfree 5

--块预留5%空间用于以后数据更新

initrans 2 --初始化事务槽数

maxtrans 255 --最大事务槽数

storage--下面是存储参数

initial 64K --初始化扩展区为64k
next 1M

--下次扩展1m

minextents 1 --最小区数为1

maxextents 16382 --最大区数无限制 );

创建唯一索引

create unique index
dept_unique_idx on dept(dept_no) tablespace idx_data;

创建位图索引:

create
bitmap index idx_bitm on cw(id) tablespace idx_data;

创建函数索引:
create index idx_fun on emp
(upper(ename)) tablespace idx_data;

3.3 改变索引存储参数

alter
index unique_name

pctfree
30

storage(next
200k pctincrease 20);

3.4 重建索引

alter
index unique_name rebuild tablespace indx;

----重建索引---

SQL> alter index
unique_age rebuild;

Index altered

SQL>

-----

3.5 索引碎片整理

alter
index cw_id_idx coalesce;

---碎片整理

SQL> alter index
unique_age coalesce;

Index altered

SQL>

---

3.6 删除索引

drop
index hr.deptartments_name_idx;

需要注意,如果有外键,是无法删除的,需要先禁止外键,然后再删除。

drop
table cw cascade constraints;

truncate
cw stores;

alter
table cw disable constraint fk_cw;

------

SQL> drop index
unique_age;

Index dropped

SQL>

---

3.7 数据字典

dba_indexes

dba_ind_columns

dba_ind_expressions

v$object_usage

四 视图

4.1 建立视图

create
view temp_cw as select * from cw;

可以创建制度

create
view temp_cw as select * from cw

with read
only;

4.2 视图授权

grante
create view to chenwei;

4.3 删除视图

drop view
cw;

五 同义词

同义词优点:

简化SQL语句

隐藏对象的名称和所有者

提供对象的公共访问

分为:公有同义词,私有同义词

5.1 创建同义词

create
public synonym table_name from chenwei.cw;

5.2删除同义词

drop
public synonym chenwei.cw;

六 序列

6.1 建立序列

create sequence
seq_cw

increment by 10

start with 10

minvalue 10
nomaxvalue

查询序列:

select
seq_cw.nextval from dual;

访问序列:

当前值: CURRVAL

下一个:NEXTVAL

6.2 删除序列

drop  sequence seq_cw

6.3 修改序列

alter
sequence cw_seq maxvalue 5000 cycle;

时间: 2024-11-29 08:06:11

oracle表和对象基础维护笔记的相关文章

Oracle 表空间的日常维护与管理

目录 Oracle 表空间的日常维护与管理 1.创建数据表空间 2.创建临时表空间 3.创建 UNDO 表空间 4.表空间的扩展与修改大小 5.表空间重命名 6.表空间的删除 7.更改表空间的读写模式 8.更改表空间的在线模式 Oracle 表空间的日常维护与管理 1.创建数据表空间 查询有关表和视图:[使用版本Oracle 11gR2] 1.查看表空间信息 dba_tablespaces v$tablespace 2.查看数据文件 dba_data_files v$datafile 3.查看临

Oracle PL/SQL语句基础学习笔记(上)

PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE server和其它工具中了,近几年中很多其它的开发者和DBA開始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及怎样设计并运行一个PL/SQL程序. 1.PL/SQL的长处 从版本号6開始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的长处以及其独有的数据管理的便利性,那么你非常难想象ORACLE缺了PL/SQL的情形.PL/SQL 不是一个独立的产品,他

Oracle基础知识笔记(11) 建表、更新、查询综合练习

有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓名和所属系别不能为空: 积分要第为空值,要么为6,4

Oracle实践--PL/SQL基础之表分区

PL/SQL基础入门之表分区 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ---------------------------------------------

考试系统的基础维护--基本表的连接操作

这次有幸帮师姐进行考试系统的基础维护,说直接点就是对考试人员的管理,增删改查,最基本的还是查询学生,用来和老师所给的信息进行核对,最后再确定考试的人员,在查询的过程中就遇到了这种一种情况:   在对English考试的人员进行核对的时候,为了方便查询,而建立的一个相关的视图,该视图所涉及到的表有:TB_Student(学生基本信息),TB_ExecutiveClass(涉及到所在的班级),TB_DepartmentName(所属专业),TB_CollegeName(所属学院),TB_Englis

Oracle基础知识笔记(10) 约束

大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了.如图 Oracle基础知识笔记(10) 约束

[oracle]表空间情况查看、占用、扩容、使用情况、空间维护等操作

--查询表空间使用情况SELECT Upper(F.TABLESPACE_NAME)         "表空间名",       D.TOT_GROOTTE_MB                 "表空间大小(M)",       D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",       To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT

Oracle表空间基础(1)

一.Oracle表空间概述 表空间是Oracle数据库中的一种逻辑结构.从逻辑层面上来说,表空间包含段,数据库中的对象是以段的形式来组织的,诸如表段,索引段等:从物理层面上来说,表空间是由文件构成的,数据库中的数据实际上是存储在文件当中的.表空间不是Oracle数据库中的特有概念,如在DB2中也有表空间这个概念. 二.本地管理的表空间 1.本地管理表空间中的扩展(extent)管理 使用extent management local子句显示声明创建本地管理的表空间,对于新的永久表空间来说,这是一

ORACLE有关表分区的一些维护性操作

有关表分区的一些维护性操作: 一.添加分区 以下代码给SALES表添加了一个P3分区 ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01′,'YYYY-MM-DD')); 注意:以上添加的分区界限应该高于最后一个分区界限. 以下代码给SALES表的P3分区添加了一个P3SUB1子分区 ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1