Oracle [结构,表空间,用户,表增删改]

目录

一、Oracle

二、结构

存储

内存

进程

三、创建表空间和用户

创建表空间

临时表空间

用户

四、权限

五、创建表

六、约束

行级约束

表级约束

修改表和约束

七、注释 comment

八、增删改

插入语句

修改语句

删除语句

delete,truncate的区别

九、rowid


一、Oracle

关系型数据库

通常情况下,数据库和实例是一对一的
一个数据库可以对多个实例
多个实例之间可以通过网络来进行数据的一个交互或

实例
实例=进程+内存结构
逻辑划分的内存结构和进程结构
随着数据的关闭而消失
数据库
物理文件
永久存在


实例就是类似于一个命令请求,数据库只要调入到实例包括的内存和进程中,才

二、结构

存储

包括控制文件、数据文件、日志文件等文件

select * from v$datafile; --查看数据文件
表空间是由一个或多个数据文件组成的
多个表空间之间的数据文件不是交互的
而数据库是由一个或多个表空间组成

select * from v$logfile; --查看日志文件 .LOG
用来记录数据库的变化,对数据库的所有操作,可以通过日志看到。

select * from v$controlfile;
是Oracle服务器在启动期间用来标识物理文件和数据结构的二进制文件。
/*数据文件的位置及大小
日志文件的位置和大小
数据库名称以及创建时间、日志序列号。*/
select * from v$tablespace; -- 查看表空间

-- 查询表空间与数据文件对应关系
select tablespace_name,bytes,file_name from dba_data_files;
--bytes 大小
--file_name 文件路径
/*
SYSTEM 系统表空间
UNDOTBSI 重做表空间
SYSAUX  辅助系统表空间
USERS 用户的表空间
TEMP 临时表空间
*/


内存

包括系统全局区和程序全局区

内存也是影响数据库性能的第一因素

系统全局区SGA:是所有用户都可以访问的共享内存区域。--系统全局区的东西属于公共资源呢

程序全局区PGA:为单独的服务器进程存储私有数据的内存区域--程序全局区的东西是有主的,是私有的
/*
排序区:存储order by、group by包含排序操作的sql语句所产生的临时数据,因为排序并没有修改表本身。

会话区:存储会话所具有的权限、角色、性能统计信息。利用session来判断改用户是否具有某些权限。

游标区:保存执行带有游标的语句所产生的临时数据。

堆栈区:存储会话中的变量以及sql语句在运行时的内存结构信息。
*/

进程

包括前台进程和后台进程。

单进程实例和多进程实例
用户进程和Oracle进程
Oracle进程又可以分为:服务器进程和后台进程。

用户进程
就是当用户运行应用程序时,操作系统会为用户运行的应用建立一个进程。
服务器进程
用于处理连接到该实例的用户进程的请求。
后台进程
是在实例启动时启动,启动Oracle数据库的实例时会自动启动后台进程。

三、创建表空间和用户

创建表空间

创建表空间:
create  tablespace  name 
datafile  '表空间文件路径'  
size 1G autoextend on next 100M maxsize unlimited;
/*
name:表空间名称
datafile:指定表空间文件(一般指向oracle安装根目录下oradata/数据库实例名/.dbf)
size 1G:指定表空间文件的初始大小 G、M、K
autoextend on next 100M:autoextend表示表空间大小自动扩展
on next 100M 每次表空间满了之后年扩展的100m
maxsize unlimited:maxsize指定表空间的最大存储值
unlimited 不限制表空间的最大值
*/

临时表空间

创建临时表空间语法:
create temporary tablespace name 
tempfile '表空间文件路径' 
size 1G autoextend on next 100M maxsize unlimited;
/*
temporary:关键字
tempfile:指定临时表空间文件
*/

修改

--修改表空间 autoextend
ALTER DATABASE   
    DATAFILE '文件路径' AUTOEXTEND   
    ON NEXT 200M MAXSIZE 2G  
--修改原有的数据文件大小 resize
alter database datafile '文件路径' resize 100M;
--为表空间增加新的数据文件
alter tablespace 表空间名 add datafile 数据文件 size 大小

用户

创建用户语法:
create user name 
default tablespace tablespace_name temporary tablespace temptablespace_name identified by password;

/*
name:用户名
default tablespace tablespace_name:指定用户的默认表空间 
temporary tablespace temptablespace_name:指定用户的默认临时表空间,
identified by password 指定用户的密码
password用户密码
*/
修改用户
alter user user_name 
default tablespace tablespace_name temporary tablespace temptablespace_name identified by password;

删除

删除用户
drop user user_name;
删除表空间
drop tablespace tablespace_name;
删除表空间的同时删除数据文件
drop tablespace 表空间的名字 
including contents and datafiles

四、权限

权限指的是执行特定命令或访问数据库对象的权利
系统权限和对象权限

系统权限
GRANT UNLIMITED TABLESPACE TO test1; --此系统权限允许test1用户任意使用表空间
对象权限
GRANT ALL ON SCOTT.EMP TO test1;  --允许用户插入、删除、更新和查询 EMP 表中的记录

GRANT CONNECT TO test1; --CONNECT角色允许用户连接至数据库,并创建数据库对
GRANT RESOURCE TO test1;  --RESOURCE角色允许用户使用数据库中的存储空间
GRANT CREATE SESSION TO test1; --此系统权限允许用户连接到数据库上

给用户赋权限
grant connect,resource to test1;

查看当前用户的权限
select * from user_sys_privs;

revoke 收回权限

五、创建表

create table 表名(
   列名(字段名) 数据类型 约束 默认值,--约束、默认值都是可以省略的
   列名 数据类型 约束 默认值,
   列名 数据类型 约束 默认值,
   ...
   表级约束              --可选
)tablespace 表空间名; 
一般以字母开头,可以有_、数字、$等,长度不能超过30个英文字符;

表空间名是可省略的,默认表会保存到用户的默认表空间中
也可以加上,表示指定将表存入某个表空间;

create table student(
   id number(11),
   name varchar2(20),
   age number(3),
   cid number(11)
);

修改表名
ALTER TABLE a RENAME TO b;

查看表结构
desc student;

删除表:
drop table 表名;

--数据备份
create table 表名 as select语句; 
create table student as select * from student_aa;

六、约束


行级约束

建表时跟在字段定义后面,约束当前行定义的列的约束叫做行级约束

表级约束

建表时写在所有字段定义之后的约束,它可以约束某个列或者多个列

1.not null 非空约束
这个列的值不能为空

列名 数据类型 not null       --行级约束语法

!!not null是唯一个行级约束,不能写成表级约束!!

2.unique 唯一约束 
这个列的值在整个表的数据中,是唯一的不可重复

列名 数据类型 unique       --行级约束语法

constraint 约束名 (康死追克)unique(列名)  --表级约束,在所有列定义之后

3. primary key 主键约束
--primary key = not null + unique
这个列的值不能为空且不能重复

列名 数据类型  primary key         --行级约束语法
constraint 约束名 primary key(列名)   --表级约束
在表级约束中,如果有多个列时,表示这几个列为联合主键

4. foreign key 外键约束
这个列的取值,只能在主表的主键列的值中去取
列名 数据类型 references 主表名(主表主键列)    --行级约束语法


create table student(
   id number(7) primary key, --主键约束
   name varchar2(30) not null,  --非空约束
   age number(7),
   cid number(7) references class(cid) --外键约束
);
constraint 约束名 foreign key(外键列) references 主表名(主表主键列)  --表级约束
--表级约束,在所有列定义之后
--constraint pk primary key(id)  

5.check 检查约束
表示这个列的取值要满足check后面的约束条件

列名 数据类型 check(约束条件)   --行级约束

create table student(
    id number(11) primary key, --id非空且唯一
    name varchar2(30) not null, --name非空
    age number(3) check(age>0 and age<150), --age 0-150之间
    sex varchar2(2) default '男' check(sex in ('男','女')), --默认男,男女两个选项
    pwd varchar2(20), 
    constraint st_pwd check(length(pwd)>8) --pwd长度大于8
);

constant 约束名 check(约束条件)  --表级约束


修改表和约束

1.给表添加一个列
alter table 表名 add 列名 数据类型 [约束] [default 默认值];
alter table student add birthday date;

2.删除表中的一个列
alter table 表名 drop column 列名;
alter table student drop column pwd;

3.修改一个列
alter table 表名 modify 要修改的列名 数据类型 [约束] [default 默认值];
alter table student modify age number(5) not null ;

Mysql:
alter table stu change name sname varchar(10); --修改字段名 
alter table stu modify sname int; --

修改列时
如果列有数据,不能直接修改列的数据类型
只能把它长度增加,但不能减少
alter table 表名 modify 列名 数据类型 not null;  --给一个列添加not null 约束
alter table 表名 modify 列名 数据类型 null   --给一个列去掉非空约束

4.增加一个约束
alter table 表名 add 表级约束语法;

alter table 表名 add constraint 约束名 unique(列名)

alter table 表名 add constraint 约束名 primary key(列名[,列名])
alter table a11 add constraint pk1 primary key (id)

alter table 表名 add constraint 约束名 foreign key(外键列) references 主表名(主表主键列)
alter table b2 add constraint fk_b1 foreign key(id) references b1(id)

alter table 表名 add constant 约束名 check(约束条件)
alter table b3 add constraint jk_b3 check(id>18)

5.删除一个约束
alter table 表名 drop constraint 约束名;

表级约束有名字,行级约束系统会给分配一个名字sys_

七、注释 comment

给表加注释
comment on table 表名 is '注释';
comment on column 表名.列名 is '注释';

comment on column student.id is '主键'; 

八、增删改

插入语句

insert into 表名(列名...) values(值...);

insert into student(id, name) values(1,'tom');
insert into student values(2,'amy',);

--从已有的数据库表中查出数据并插入另一个表
--insert into 表名(列名,列名,...,列名) select子查询

修改语句

update 表名 set 列名=值,列=值,...,列值 where 条件;

update student set name='aa' where id=1;
--将s001学生的c001课程成绩改为该课程的平均成绩
update sc set score=(select avg(score) from sc where cno='c001') where sno='s001' and cno='c001';

删除语句

delete  [from] 表名 where 条件;

delete from student where id=1;

注意:delete语句执行前一定要检查where条件,最好备份

delete 删除表数据,保留表结构
truncate table 表名; --删除表中所有数据,保留表结构
drop table 表名 --删除表结构和数据;

delete,truncate的区别

  1. truncate 语句不能带where 条件,删除表中所有数据,不记录日志,执行效率高
    delete可带where 条件 可以删除部分数据,也可以删除所有数据,它删除时,会记录日志
  2. truncate:DDL操作,执行后无事务产生,不可回滚
    delete:DML操作,执行后产生事务,可回滚,数据存放到rollback segment。
  3. truncate:只能删除表,不可以操作视图
    delete:可以删除表和视图。
  4. truncate 的速度远快于delete
    truncate table 表名 速度快,而且效率高
    当执行delete操作时所有表数据先被copy到回滚表空间,truncate 是直接删除数据不进回滚表空间。
    truncate 使用的系统和事务日志资源少。
    delete 每次删除一行,并在事务日志中为所删除的每行记录一项。
  5. 不能truncate一个有外键的表,truncate不能触发delete的触发器,而delete 会正常触发。
  6. Truncate 操作会重置表的高水位线(High Water Mark),而delete 不会。

九、rowid

oracle数据库的表中的每一行数据都有一个唯一的标识符 = 身份证

rowid为该表行的唯一标识
该值表明了该行在oracle数据库中的物理具体位置。
包含着数据对象编号,对应文件编号, 块编号和 行编号的信息。

使用rowid可以去除重复记录

select t.*,rowid from student t 
DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID)
     FROM EMP X WHERE X.EMP_NO = E.EMP_NO);


 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值