1.结构
数据库-->数据库实例(ORCL)-->表空间(用户里面的创建表)-->文件
2.创建表和删除空间
创建语法:
create tablespace 表空间的名称
datafile '文件的路径(服务器上的)'
size 大小
autoextend on 自动扩展
next 每次扩展的大小
例:
create tablespace handong
datafile 'c:\handong.dbf'
size 100m
autoextend on
next 10m;
删除表空间:
drop tablespace 表空间名称
例:
drop tablespace handong;
注意:
创建表空间时要切换到系统账户
删除表空间时要先执行删除语句,但磁盘上文件还是有的,磁盘文件需手动删除
3.创建用户并授予权限(在系统账户中创建)
语法:
create user 用户名
indentified by 密码
default tablespace 表空间的名称;
grant 角色
|权限
to 用户名;
例:
create user dakang
indentified by dakang
default tablespace handong;
grant dba
to dakang;
角色|权限相关:
Oracle中已存在三个重要的角色:connect角色,resource角色,dba角色
connect角色:是授予最终用户的典型权力,最基本的
alter session
--修改会话
create cluster
--建立聚簇
create database link
--建立数据库链接
create sequence
--建立序列
create session
--建立会话
create synonym
--建立同义词
create view --建立视图
resource角色:
--是授予开发人员的
create cluster
--建立聚簇
create procedure --建立过程
create sequence
--建立序列
create table --建立表
create trigger --建立触发器
create type
--建立类型
dba角色:拥有全部特权,是系统的最高权限,只有dba才可以创建数据库结构,并且系统权限也需要dba授出,且dba用户可以操作全体用户的任意表包括删除
4.表的约束
主键约束:primary key
非空约束:not null
唯一约束:unique
检查约束:check()
外键约束:
添加外键约束:
alter table product
add foreign key(cno) reference category(cid);
强制级联删除:先删除外键约束,然后删除自己(不好)
drop table category
cascade constaint;
添加外键约束,使用级联约束,在删除的时候,使用级联删除
alter table product
add foreign key(cno) reference category(cid)
on delete cascade;
级联删除:首先去从表中找有没有关联数据,如果在从表中有关联数据,先删除从表中的数据,然后再删除表中的数据
delete from category
where cid
=2;
5.子查询插入数据
insert into emp1
select * from emp
where dptno
=10;
6.delete和truncate的区别
delete:DML、逐条删除、支持事务操作
truncate:DDL、先删除表在创建表、不支持事务操作、执行效率要高
7.视图
是对查询结果的一个封装
视图里面的所有的数据,都是来自于它查询的那张表,试图本身不存储任何数据
能够封装复杂的查询结构
屏蔽表中的细节
语法:
create [or replace] view 视图名称
as 查询语句
[with read only]
注意:
通常不要通过视图去修改,视图创建的时候,通常要加上with read only
例:
create or replace view view_test1
as select ename,job,mgr
from emp
with read only;
同义词:synonym
create synonym dept
for view_test1;
8.序列
生成类似于auto_increment这样ID自动增长 1,
2,
3...
auto_increment这个是mysql的
语法:
create sequence 序列名称
start with 从几开始
increment by 每次增长多少
maxvalue 最大值| nomaxvalue
minvalue 最小值| nominvalue
cycle | nocycle 是否循环
cache 缓存的数量 | nocache
例:
create sequence seq_test1
start with 1
increment by 2
maxvalue 30
cycle
cache 10;
如何从序列中获取值
currval:当前值
nextval:下一个值
注意:
currval 需要在nextval调用之后再调用
例:
select seq_test1.nextval
from dual;
select seq_test1.currval
from dual;
9.索引 (原理:平衡二叉树)
相当于一本书,能够提高我们的查询效率
如果某一列,经常用来作为查询条件,那么有必要创建索引,在数量比较多的情况下
语法:
create index 索引的名称
on 表名(列);
例:
create index ind_wubaiwan
on wubaiwan(name);
创建复合索引
create index ind_wubaiwan
on wubaiwan(name,address);
注意:
主键约束自带主键索引,唯一约束自带唯一索引
10.PLSQL入门
Procedure Language 过程语言,Oracle对SQL的一个扩展
语法:
declare
--声明变量
变量名 变量类型;
变量名 变量类型 := 初始值;
例:
vsal emp.sal%type;
--声明引用型的变量
vrow emp
%rowtype;
--声明记录型变量
begin
--业务逻辑
end;
dbms_outputput.put_line(); --相当于java的System.out.println();
例:
declare
i varchar2(
10) :
= '张三';
begin
dbms_output.put_line(i);
end;
--查询7369号员工的工资,并打印出来
declare
vsal emp.sal%type;
begin
--将查询结果赋值给vsal
select sal
into vsal
from emp
where empno
=7369;
dbms_output.put_line(vsal);
end;
--查询7369号员工的信息
declare
vrow emp%rowtype;
begin
select * into vrow
from emp
where empno
=7369;
dbms_output.put_line(vrow);
end;
PL条件判断
语法:
if then
elsif then
else
end if;
例:
--根据不同的年纪,输出相关的内容
declare
age number :
= &aaa;
--可以控制台输入,控制台输入付给aaa,aaa 赋给age
begin
if age
< 18 then
dbms_output.put_line('小屁孩');
elsif age >= 18 and age
< 24 then
dbms_output.put_line('年轻人');
elsif age > 24 and age
< 45 then
dbms_output.put_line('中年人');
else
dbms_output.put_line('老年人');
end if;
end;
PL循环
语法:
while循环
while 条件 loop
end loop;
for循环
for 变量
in[reverse] 起始值..结束值 loop
end loop;
loop循环
loop
exit when 条件
end loop;
例:
--输出1~10
while循环
declare
i number :
= 1;
begin
while i
<= 10 loop
dbms_output.put_line(i);
i := i
+1;
end loop;
end;
for循环
declare
begin
for i
in 1..
10 loop
dbms_output.put_line(i);
end loop;
end;
loop循环
declare
i number :
= 1;
begin
loop
exit when i
> 10
dbms_output.put_line(i);
i := i
+ 1;
end loop;
end;
转载于:https://www.cnblogs.com/QQ1171492144/p/10654210.html
相关资源:Oracle完全学习手册.pdf
转载请注明原文地址: https://win8.8miu.com/read-1481818.html