Oracle-第四章-DDL数据定义语言

四、DDL数据定义语言

数据定义语言:定义、修改或删除数据库对象

数据库对象:表,索引,约束,同义词,数据链,表空间,作业,序列,视图,物化视图,函数,过程,包,触发器

本部分的操作在PL/SQL Developer中都可 右键表名-编辑 进行操作 

1 表 table

1.1 创建表

(1)直接创建

【语法】
create table
new_table_name(
col_name1 type1,
col_name2 type2,
···
col_namen typen,
);


####例
create table gamerole(
id     varchar2(32),
name   varchar2(50),
lev    number,
zhiye  varchar2(10),
gold   number
);

注意:列名不可以以数字或下划线开头

(2)子查询创建

【语法】
create table
new_table_name
as select子句 [where 1=];
--有 where 1=0则查询无果,只备份表结构

1.2 修改表

在PL/SQL Developer 中右键表名-编辑-即可修改
右下角可看对应SQL语句 

(1)修改表名

alter table 原表名 
rename to 新表名;

(2)添加/修改表注释

comment on 
table 表名 is '注释';

(3)修改列名

alter table tbName 
rename column 原列名 to 新列名;

(4)添加列

alter table tbNmae 
add 列名 数据类型;

(5)删除列

alter table tbName 
drop column 列名;

(6)修改列类型(要求该列数据为空)

alter table tbName 
modify 列名 修改后的类型;
--如果该列数据不为空,则可能无法修改

(7)添加/修改列注释

comment on 
column 表名.列名 is '注释';
--注意是点,不是逗号

1.3 删除表

drop table tbName;
--难以恢复,使用时应当注意

2 约束 constraint

给数据添加限制条件
constraint

2.1 主键约束

使得主键列数据 不可重复,不可为空
一个表只能有一个主键约束

alter table tbName 
add constraint 主键名 
primary key (主键列);
--此处主键名是自定义的一个名称
--此处主键列指需要定义成主键列的一列或多列
--联合主键(即多列)(基本不用):性即保证多列不是完全一致
--建表直接添加主键约束 在列属性后加上 primary key即可

###仅例
alter table daily
add constraint pk_daily_dayno--主键名示例
primary key (dayno);

2.2 约束

使得约束列数据 不可重复,可以为空
一个表可以有多个约束

alter table tbName 
add constraint 约束名 
unique (col_name);

2.3 检查约束(基本不用)

alter table tbName 
add constraint 约束名 
check (限制条件);
--可以添加任意约束条件

####例
alter table GAMEROLE 
add constraint ck_game_lev 
check (lev between  and 30);

2.4 非空约束

alter table tbName 
modify 列名 [not] null;
--加 not 则不可为空

####仅例
alter table daily
add constraint check_name
check (length(things)>5);
--条件可以直接使用函数

2.5 默认值

alter table tbName 
modify 列名 default 默认值;
--具体用处参考 用 DEFAULT插入数据
####例
alter table GAMEROLE 
modify gold default ;

2.6 外键(强烈不推荐写)

alter table tbName 
add constraint 约束名 
foreign key (外键列) 
references 主表 (主键) 
[on delete cascade];
--添加 on delete cascade 
  删除主表数据同时将子表依赖于该主表数据的子数据删掉(不建议写)
--不添加 on delete cascade 
  会导致 ERROR:ORA-02292违反完整约束条件
  无法删除有外键依赖的数据

3 索引

相当于书的目录
一个表比作一本书,一条记录比作一页,rowid相当于页码

当从表中查找记录时,先从索引搜索该关键词,找到对应的rowid,然后根据rowid进行查询

3.1 b_tree 索引

即普通的索引[normal]
适用于 该列基数比较大 可取的值特别多 的情况
不记录空值
如果对索引列进行函数运算,索引失效

create index 索引名 
on 表名 (列名...);

####例
create index idx_stu_name 
on STUDENT (name);
create index idx_stu_name 
on STUDENT (name,age);--复合索引

####不记录空值-例
select * from student 
where name is null;
--这条sql不会走索引

####函数运算,索引失效-例
select * from student 
where substr(name,1,1) = '张';
--这条sql不会走索引

####索引样子-例
假设在name列建立索引,那么索引样子如下
name1   AAAVbFAAEAAAA/eAAA
name2   AAAVbFAAEAAAA/eAAB
name3   AAAVbFAAEAAAA/eAAC
name4   AAAVbFAAEAAAA/eAAD
name5   AAAVbFAAEAAAA/eAAE
name6   AAAVbFAAEAAAA/eAAF
name7   AAAVbFAAEAAAA/eAAG
name8   AAAVbFAAEAAAA/eAAH

3.2 索引 index

创建主键或约束时
自动创建同名的索引
索引的值是的

3.3 位图索引

适用于 该列基数比较小 可取的值比较少 重复值多 的情况
记录空值
create bitmap index 索引名 
on 表名 (列名...);

####空值可走索引-例
create bitmap index IDX_STU_NAME 
on STUDENT (gender);
select * from student 
where name is null;--可以走索引

3.4 函数索引

create  index 索引名 
on 表名 (函数操作);

####例
create index IDX_STU_NAME 
on STUDENT (SUBSTR(NAME,1,1));
select * from student 
where substr(name,1,1) = '张';--走索引

3.5 是否走索引的判断

在PL/SQL中按F5打开解释执行窗口
可以通过查看是否有 index
判断sql语句是否走索引

注意:需要有where子句使用索引条件才能走索引
###理解例
假如:emp表中ename为索引列
     select empno from emp;
     --不走索引
     select ename from emp 
     where empno='7521';
     --走索引

4 视图(view)

【语法】
create or 
replace view 视图名
as select 子句;
--没有视图则创建 有就替代
--节省空间(实际上是虚拟表 不保存数据 不占用空间)
--实时性(视图数据随源表数据变化而变化)
--保护数据(一般不能修改数据)
--清晰明了(节省代码量)
--查询速度慢(查询视图就相当于查询视图中的sql语句))
用途:简化表连接

###理解例
create or replace 
view v_stu
as select s.groupno,count(1) rs 
   from student s 
   group by s.groupno;

5 物化视图 【记录】 materialized view

(materialized view)常用于业务系统

--物化视图是保存数据的,查询速度和表一样
--数据不是实时的,要定期更新
--用途:常用于业务系统

物化视图数据更新
(1)自动更新,设置一个时间点【了解】
(2)手动更新
    BEGIN
       dbms_mview.refresh(list             => '视图名',
                      method               => 'fast', -- 增量刷新
                      refresh_after_errors => TRUE);
    END;

6 序列 sequence

--用途:产生自增序列号(流水号)的对象

【语法】
create sequence 序列名
minvalue 小值
maxvalue 大值
start with 下一个值
increment by 自增量;

###知识例
create sequence xlm
minvalue 1
maxvalue 9999
start with 20
increment by 15;
--建序列
select xlm.nextval from dual;
--下一列
--每一次用netval,当前值就会+15
select xlm.currval from dual;
--当前列

###展示例
insert into 
stu1(name,birthday,age) 
values ('sss',sysdate,seq_stu.nextval);

7 同义词 Synonyms

--用途:给对象取别名
	   例;如给表取表别名
	      用表别名修改内容
	      则源表也被修改

【语法】
create or replace 
synonym 同义词名 
for 用户名.原对象名;


###展示例
create or replace 
synonym stu 
for scoTT.studeNT;

8 表空间【重要】tablespace

--既是物理结构又是逻辑结构

【语法】
CREATE TABLESPACE 表空间名称 
DATAFILE 数据文件路径(.DBF文件路径) 
SIZE 表空间的初始值 
AUTOEXTEND ON 
NEXT 自动扩展大小 
MAXSIZE UNLIMITED|大存储大小;
--创建表空间
--‘|’表示‘或’
--UNLIMITED表示没有上限

【语法】
create table EMP
(
col1 tapy1,
    ...
) 
tablespace tbs_202202
--建表选择表空间 tbs_202202(此处可更改)
  如果不选,放入默认表空间users

【语法】
create temporary tablespace
--创建临时表空间
  用途:存放临时数据(如 排序数据、临时表的数据)
--在创建表空间语法中添加关键字 temporary 即可

【语法】【了解】
select * 
from DBA_FREE_SPACE; 

###展示例
CREATE TABLESPACE tbs_202202
DATAFILE 'd:/app/scl/oradata/orcl/tbs_202202_01.dbf',
         'd:/app/scl/oradata/orcl/tbs_202202_02.dbf'
SIZE 4000M
AUTOEXTEND ON 
NEXT 100M
MAXSIZE UNLIMITED;

9 数据链【禁用】database link

【语法】
create database link 数据链名
connect to 用户名 identified by 密码
using 'ip/实例名';
--实例名指数据库名 如:orcl
--此处‘/’是字符,非‘或’

create database link db242
connect to scott identified by scott
using '192.168.1.242/orcl';

select * from emp@db242 e join dept d on e.deptno=d.deptno;*

10 用户 user

create user 用户名
       identified by '密码';
--创建用户

11 删除对象 drop

drop 对象关键字 对象名称;

###展示例
drop table 表名称;
drop view 视图名称;
等等类似;

你可能感兴趣的:(数据仓库,oracle,数据库)