数据定义语言:定义、修改或删除数据库对象
数据库对象:表,索引,约束,同义词,数据链,表空间,作业,序列,视图,物化视图,函数,过程,包,触发器
本部分的操作在PL/SQL Developer中都可 右键表名-编辑 进行操作
(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则查询无果,只备份表结构
在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;
--难以恢复,使用时应当注意
给数据添加限制条件
constraint
使得主键列数据 不可重复,不可为空
一个表只能有一个主键约束
alter table tbName
add constraint 主键名
primary key (主键列);
--此处主键名是自定义的一个名称
--此处主键列指需要定义成主键列的一列或多列
--联合主键(即多列)(基本不用):性即保证多列不是完全一致
--建表直接添加主键约束 在列属性后加上 primary key即可
###仅例
alter table daily
add constraint pk_daily_dayno--主键名示例
primary key (dayno);
使得约束列数据 不可重复,可以为空
一个表可以有多个约束
alter table tbName
add constraint 约束名
unique (col_name);
alter table tbName
add constraint 约束名
check (限制条件);
--可以添加任意约束条件
####例
alter table GAMEROLE
add constraint ck_game_lev
check (lev between and 30);
alter table tbName
modify 列名 [not] null;
--加 not 则不可为空
####仅例
alter table daily
add constraint check_name
check (length(things)>5);
--条件可以直接使用函数
alter table tbName
modify 列名 default 默认值;
--具体用处参考 用 DEFAULT插入数据
####例
alter table GAMEROLE
modify gold default ;
alter table tbName
add constraint 约束名
foreign key (外键列)
references 主表 (主键)
[on delete cascade];
--添加 on delete cascade
删除主表数据同时将子表依赖于该主表数据的子数据删掉(不建议写)
--不添加 on delete cascade
会导致 ERROR:ORA-02292违反完整约束条件
无法删除有外键依赖的数据
相当于书的目录
一个表比作一本书,一条记录比作一页,rowid相当于页码
当从表中查找记录时,先从索引搜索该关键词,找到对应的rowid,然后根据rowid进行查询
即普通的索引[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
创建主键或约束时
自动创建同名的索引
索引的值是的
适用于 该列基数比较小 可取的值比较少 重复值多 的情况
记录空值
create bitmap index 索引名
on 表名 (列名...);
####空值可走索引-例
create bitmap index IDX_STU_NAME
on STUDENT (gender);
select * from student
where name is null;--可以走索引
create index 索引名
on 表名 (函数操作);
####例
create index IDX_STU_NAME
on STUDENT (SUBSTR(NAME,1,1));
select * from student
where substr(name,1,1) = '张';--走索引
在PL/SQL中按F5打开解释执行窗口
可以通过查看是否有 index
判断sql语句是否走索引
注意:需要有where子句使用索引条件才能走索引
###理解例
假如:emp表中ename为索引列
select empno from emp;
--不走索引
select ename from emp
where empno='7521';
--走索引
【语法】
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;
(materialized view)常用于业务系统
--物化视图是保存数据的,查询速度和表一样
--数据不是实时的,要定期更新
--用途:常用于业务系统
物化视图数据更新
(1)自动更新,设置一个时间点【了解】
(2)手动更新
BEGIN
dbms_mview.refresh(list => '视图名',
method => 'fast', -- 增量刷新
refresh_after_errors => TRUE);
END;
--用途:产生自增序列号(流水号)的对象
【语法】
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);
--用途:给对象取别名
例;如给表取表别名
用表别名修改内容
则源表也被修改
【语法】
create or replace
synonym 同义词名
for 用户名.原对象名;
###展示例
create or replace
synonym stu
for scoTT.studeNT;
--既是物理结构又是逻辑结构
【语法】
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;
【语法】
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;*
create user 用户名
identified by '密码';
--创建用户
drop 对象关键字 对象名称;
###展示例
drop table 表名称;
drop view 视图名称;
等等类似;