返回顶部
首页 > 资讯 > 数据库 >oracle表和对象基础维护笔记
  • 630
分享到

oracle表和对象基础维护笔记

2024-04-02 19:04:59 630人浏览 泡泡鱼
摘要

一 oracle表和对象基础维护笔记1.1 常见概念1.2 创建表1.3 表常见字段1.4 增加或删除字段1.5 更新字段1.6 重命名表1.7 改变表存储表空间和存储参数1.8 删除表1.9 表

一 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;

 

 


您可能感兴趣的文档:

--结束END--

本文标题: oracle表和对象基础维护笔记

本文链接: https://lsjlt.com/news/34628.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作