Oracle基础详解-表的创建与管理、索引的创建与管理、约束的创建与管理

–清空表
truncate table t1;
select * from t1;

–删除表
drop table t1;
select * from t1;

–表的创建
create table t1 (id number(6),name varchar2(8),sex varchar2(2),grade varchar2(4));
insert into t1 values (1,‘Tom’,‘G’,‘20’);
commit;
select * from t1;

begin
for i in 1…100
loop
insert into t1 values (i,‘zhangsan’,‘G’,‘18’);
commit;
end loop;
end;

select * from t1;

–修改表的列名
alter table t1 rename column name to first_name;
select * from t1;

–添加列名
alter table t1 add last_name varchar2(10);
select * from t1;

–删除列名
alter table t1 drop column grade;
select * from t1;

–修改数据类型
ID N NUMBER(6) Y
–FIRST_NAME N VARCHAR2(8) Y
SEX N VARCHAR2(2) Y
LAST_NAME N VARCHAR2(10) Y

alter table t1 modify first_name varchar2(20);
select * from t1;

ID N NUMBER(6) Y
–FIRST_NAME N VARCHAR2(20) Y
SEX N VARCHAR2(2) Y
LAST_NAME N VARCHAR2(10) Y

–复制表
create table t2 as select * from v$database;
select * from t2;

–删除表的定义
drop table t2 cascade constraints;
drop table t2 purge;

–临时表(会话级)使用sqlplus / as sysdba测试
create global temporary table temp_session on commit preserve rows as select * from v$database;

–临时表(事物级)使用sqlplus / as sysdba测试
create global temporary table temp_transfer on commit delete rows as select * from v$ instance;
insert into temp_transfer select * from v$instance;

–删除表
drop table t1;
select * from t1;





–索引
create table t1 (id number,name varchar2(6),sex varchar2(2),grade varchar2(4));
alter table t1 modify name varchar2(20);
begin
for i in 001…010
loop
insert into t1 values(i,‘zhangsan’,‘G’,10+i);
commit;
end loop;
end;

–select * from t1;

begin
for i in 11…20
loop
insert into t1 values(i,‘思思’,‘F’,i);
commit;
end loop;
end;

select * from t1;

create index chaxun_grade on t1(grade);
select * from t1 where grade=‘12’;

选中该查询预计,按F5可查看计划任务,如下图:

在这里插入图片描述

=========================================================================================================================

–添加单列索引
create index chaxun_grade on t1(grade);

–单列索引指定索引表空间
create tablespace index1 datafile ‘/home/oracle/index1.dbf’ size 100M autoextend off;
create index chaxun_name on t1(name) tablespace index1;
select * from dba_tables where table_name LIKE ‘%INDEX%’;

–组合索引
create index zuhe on t1(id,name);

–位图索引
create bitmap index zuhe_id_grade on t1(id,grade);

–修改索引名称
alter index chaxun_name rename to cx_name;

–合并索引
alter index cx_name coalesce;

–重建索引
alter index cx_name rebuild; --会锁表
alter index cx_name rebuild online; --在线重建索引,不会锁表

–删除索引
drop index cx_name;

–索引的数据字典
select * from user_indexes;
select * from user_ind_columns;
select * from all_indexes;

–删除表
drop table t1;
select * from t1;





–约束(constraints)包含
–not null(非空)、primary key (主键)、 unique(唯一)、foreign key (外键)、 check(区间)

–建表时新建约束
create table t1 (id number primary key,name varchar2(6),sex varchar2(4),grade varchar2(4)); --id设置为主键
alter table t1 modify name varchar2(20);–将name的输入值由6改为20
select * from t1;
insert into t1 values(1,‘zhangsan’,‘G’,‘20’);
select * from t1;

–删除表
drop table t1;
–新建表
create table t1 (id number,name varchar2(6),sex varchar2(4),grade varchar2(4));–新建没有约束的表,然后添加约束
alter table t1 modify grade not null;–将grade的值设置为非空,必填项
alter table t1 modify grade null; --将grade的值改为可以为空
alter table t1 modify name varchar2(300);
alter table t1 add address varchar2(100);–增加名为address的列
insert into t1 values(1,‘zhangsan’,‘G’,‘20’,‘China’);

select * from t1;

–添加主键
alter table t1 add constraint zhujian primary key (id);

–查询约束
select * from dba_constraints where table_name=‘T1’;
select * from all_constraints where constraint_name like ‘%ZHUJIAN%’;
select * from user_constraints where table_name=‘T1’;
select * from user_constraints where constraint_name like ‘%ZHUJIAN%’;

–删除指定的约束
先查询user_constraints
alter table t1 drop constraints zhujian;

–增加唯一约束
alter table t1 add constraint weiyi unique(name);
insert into t1 values (1,‘zhangsan’,‘G’,‘20’,‘China’);–无法添加该条,因为违反name唯一约束
alter table t1 drop constraint weiyi;–删除唯一约束
insert into t1 values (1,‘zhangsan’,‘G’,‘20’,‘China’);–可插入该条
select * from t1;

–检查约束
alter table t1 add constraints jiancha check (grade>20);–无法插入,因为之前有小于等于20的值
alter table t1 add constraints jiancha check (grade>=20);–修改之后为大于等于20,可添加该约束
insert into t1 values (2,‘shanghai’,‘G’,‘19’,‘China’);–违反检查约束
insert into t1 values (2,‘shanghai’,‘G’,‘20’,‘China’);–可插入
select * from t1;

–外键
–引用另外一个表中的某一列或几列的值,当定义为外键时,可以是同一张表,也可以是不同的表,如果是同一张表,叫自引用

–删除表
drop table t1;
–新建表
create table t1 (id number,name varchar2(6),sex varchar2(4),grade varchar2(4));–新建没有约束的表,然后添加约束
alter table t1 modify grade not null;–将grade的值设置为非空,必填项
alter table t1 modify grade null; --将grade的值改为可以为空
alter table t1 modify name varchar2(300);
alter table t1 add address varchar2(100);–增加名为address的列
insert into t1 values(1,‘zhangsan’,‘G’,‘20’,‘China’);
alter table t1 add constraints zhujian primary key (id);–将t1的id设置为主键,才能作为t2的外键

create table t2 (IP number references t1(id),name varchar2(20),bumen varchar2(20));–建表时设置外键
select * from user_constraints where table_name =‘T2’;–查找T2的约束
alter table t2 drop constraint SYS_C0011830;–删除T2的约束
alter table t2 add constraints t2_t1_yueshu foreign key (IP) references t1(id);–将T2的IP引用T1的ID作为外键

select * from t1;

–删除表
drop table t1; --后删除,因为T1的ID被作为外键引用
drop table t2; --先删除,因为T2的IP被引用了T1的ID作为外键

select * from t1;
select * from t2;

–强制删除引用外键的表 drop table t1 cascade constraints;–直接删除T1