一、表空间
1、创建永久表空间
create tablespace myspace datafile 'd:\oracletext\text.dbf' size 20M autoextend on next 30M maxsize 1G;
2、创建临时表空间
create temporary tablespace myspace2 tempfile 'd:\oracletext\text2.dbf' size 20M autoextend on next 30M maxsize 1G;
3、扩展表空间
a、为表空间增加数据文件
alter tablespace myspace add datafile 'd:\oracletext\text3.dbf' size 100M;
b、修改数据文件的大小
alter database datafile 'd:\oracletext\text.dbf' resize 100M;
4、删除表空间
drop tablespace myspace including contents and datafiles;
5、关于表空间的说明
上面所做的操作都是在system用户管理员下进行的,因为scott用户没有权限去创建表空间。
6、补充:重命名表空间
alter tablespace myspace rename to mytablespace;
7、补充:设置表空间的读写状态
alter tablespace mytablespace read only;--只读
alter tablespace mytablespace read write;--读写
二、进入、退出pdb模式
1、进入pdb模式
在system管理员用户下:
alter session set container=pdborcl;
创建超级管理员sys连接
在sys/root用户下:
alter session set container=pdborcl;
alter pluggable database pdborcl open;
2、退出pdb模式
sys超级管理员用户下:
Alter pluggable database pdborcl close immediate;
alter session set container =cdb$root;
三、表的操作
1、创建表
在scott/tiger用户下:
create table tt(
tid number(4),
tname varchar2(10),
tage number(3)
);
2、在表上添加一列
alter table tt add tsal number(8,2);
3、修改表名(重命名)
方法一:
alter table tt rename to t;
方法二:
rename t to tt;
4、修改列名(重命名)
alter table tt rename column tage to age;
5、修改列的数据类型
alter table tt modify age varchar2(5);
6、删除列
alter table tt drop column age;
7、增删改元素:
insert into tt values(3,'aa',23);
insert into tt values(5,'cc',222);
insert into tt values(7,'dd',998);
insert into tt(tid,tname) values(12,'WOWO');
delete from tt where tid=3;
update tt set tname='haha' where tid=12;
8、删除表
drop table tt;
四、约束
1、非空约束
a、建表时创建非空约束:
create table tt(
tid number not null
);
b、建表后创建非空约束
create table tt(
tid number ,
tname varchar2(10)
);
alter table tt modify(tid not null,tname not null);
c、添加列的时候添加非空约束:
create table tt(
tid number ,
tname varchar2(10)
);
alter table tt add tage number(3) not null;
2、唯一约束
a、建表时创建唯一约束
create table tt(
tid number constraint uni_tid unique,
tname varchar2(10)
);
b、建表后创建唯一约束:
①:形式一
create table tt(
tid number,
tname varchar2(10)
);
alter table tt add constraint uni_tid unique(tid,tname);
insert into tt values(12,'aa');
insert into tt values(12,'bb');
insert into tt values(21,'aa');
insert into tt values(12,'aa');
对于这种在括号内写两个字段创建唯一索引的方式,只有当这个两个字段都重复的时候,才会出发唯一约束属性。
②:形式二
create table tt(
tid number,
tname varchar2(10)
);
alter table tt add constraint uni_tid unique(tid);
alter table tt add constraint uni_tid2 unique(tname);
insert into tt values(12,'aa');
insert into tt values(12,'bb');
c、添加列时创建唯一约束:
create table tt(
tid number,
tname varchar2(10)
);
alter table tt add tage number(4) unique;
3、主键约束
a、建表时添加主键约束
create table tt(
tid number constraint pk_tid primary key,
tname varchar2(10)
);
b、建表后添加主键约束
create table tt(
tid number,
tname varchar2(10)
);
alter table tt add constraint pk_pid primary key(tid);
如果想创建的是联合主键的话:
create table tt(
tid number,
tname varchar2(10),
constraint uni_idname primary key(tid,tname)
);
create table tt(
tid number,
tname varchar2(10)
);
alter table tt add constraint uni_pk_pid primary key(tid,tname);
4、外键约束
a、创建表时添加外键约束
create table t(
id number(4) primary key
);
create table tt(
tid number,
tname varchar2(10),
constraint fk_tid_id foreign key(tid) references t(id)
);
b、建表后添加外键约束
create table t(
id number(4) primary key
);
create table tt(
tid number,
tname varchar2(10)
);
alter table tt add constraint fk_id foreign key(tid) references t(id);
5、默认值约束
a、创建表时添加默认值约束
create table tt(
tid number default 88,
tname varchar2(10)
);
insert into tt(tname) values('kk');
b、创建表后添加默认值约束
create table tt(
tid number,
tname varchar2(10)
);
alter table tt modify tid default '99';
insert into tt(tname) values('kk');
6、检查约束
a、建表时创建检查约束
create table tt(
tid number check(tid>8),
tname varchar2(10)
);
create table tt(
tid number constraint check_tid check(tid>0),
tname varchar2(10)
);
b、建表后创建检查约束
create table tt(
tid number,
tname varchar2(10)
);
alter table tt add constraint check_tid check(tid>5);
7、修改约束名
create table tt(
tid number constraint check_tid check(tid>0),
tname varchar2(10)
);
alter table tt rename constraint check_tid to check_id;
8、删除约束
create table tt(
tid number constraint check_tid check(tid>0),
tname varchar2(10)
);
alter table tt drop constraint check_tid;
格式:
alter table 表名 drop constraint 约束名
Alter table 表名 drop primary key
Alter table表名 drop unique(字段名)
Alter table 表名 modify 字段名 数据类型 null;
9、禁用和启动约束
create table tt(
tid number constraint check_tid check(tid>0),
tname varchar2(10)
);
alter table tt disable constraint check_tid;
alter table tt enable constraint check_tid;
五、视图
scott用户没有创建视图的权限,所以首先需要在system/root用户下为scott用户授权:
grant create view to c##scott;
在scott用户下进行操作:
1、创建视图:
a、在scott用户下创建基于emp 的视图v_emp,并且对子查询中的检索字段sal进行数据计算,查询工资上调15%以后工资大于2000的职工编号、职工姓名和上调后的职工工资。
create view v_emp as select empno,ename,sal*1.15 upsal from emp where sal*1.15>2000;
b、在scott用户下创建基于emp 和dept表的视图v_emp2,在该视图的子查询中检索编号、姓名、工资和所在部门名称。
create view v_emp as select empno,ename,sal,dname from emp e join dept d on e.deptno=d.deptno;
c、强制创建视图
create force view ve as select * from pp;--我们没有创建pp表,pp表是不存在的。
force用于强制创建基表不存在或没有权限的视图。
d、指定视图字段创建视图
create view v_emp(no,new_sal) as select empno,sal from emp;
要求:视图的列数必须与子查询的列数相同。
说明:通过指定视图字段名称就等同于在select子查询中起的别名。
2、修改视图
通过 create or replace创建视图来修改同名视图。
create view v_emp(no,new_sal) as select empno,sal from emp;
create or replace view v_emp as select empno,ename,sal from emp where sal>2000 with check option;
上面就是通过 create or replace修改视图的。
1、修改、删除视图都需要有操作视图权限。只要有权利创建视图,那么一定有操作视图权限。
2、只能修改视图的主表字段(通过主键来看哪个是主表)。
主表:在连接视图中,一个基础表的主键在视图中存在,并且在视图中仍然是主键。
with check option
限定对视图的DML操作必须满足子查询的条件
with read only
只能读取视图中的数据,不允许执行增删改操作
3、删除视图
drop view v_emp;
六、索引
1、创建索引
a、创建B树索引
create index idx_ename on emp(ename);
select * from emp where sal>2000;
--这个索引的建立不会提高该语句查询的速度,因为创建的索引没有应用到查询中去。
select * from emp where ename=‘smith’;
--这个索引的建立会提高该语句查询的速度,因为创建的索引中的ename应用到了查询语句中去了。
b、创建基于函数的索引
create index idx_lower on emp(lower(ename));
select * from emp where ename=‘smith’;
--索引在这个查询中不起作用
select * from emp where lower(ename)=‘smith’;
--索引在这个查询中起作用
c、创建复合索引
create index idx_js on emp(job,sal);
2、索引重命名
create index idx_js on emp(job,sal);
alter index idx_js rename to idx_fuhe;
3、删除索引
create index idx_js on emp(job,sal);
drop index idx_js;
七、同义词
1、创建同义词
scott用户没有创建同义词的权限,所以现在system/root用户下(管理员)为scott用户授权。
grant create synonym to c##scott;
现在就可以在scott用户下创建同义词了:
scott用户下:
create synonym e for emp;
select * from e;
创建成功后就可以通过同义词来查询表了。
2、删除同义词
drop synonym e;
3、同义词的说明
同义词最大的作用就相当于给表起别名,当然也可以给其他对象(视图、索引)等起别名。但这样的很少,基本上就是给表起别名。
八、用户
1、创建用户
在scott用户下没有创建用户的权限,所以需要在system/root用户下创建用户
create user c##aaa identified by aaa;
a、创建一个mr用户,口令为mrsoft,并设置默认的表空间为users,临时表空间为temp的用户
create user c##hr identified by mrsoft default tablespace users temporary tablespace temp;
b、创建一个mr用户,口令为mrsoft,并设置默认的表空间为users,临时表空间为temp的用户,并给users表空间分配配额100M
create user c##hr identified by mrsoft default tablespace users temporary tablespace temp quota 100M on users;
2、修改用户密码
方案1:
create user c##hr identified by mrsoft default tablespace users temporary tablespace temp quota 100M on users;
alter user c##hr identified by hr;
方案2:
create user c##hr identified by mrsoft default tablespace users temporary tablespace temp quota 100M on users;
password c##hr;
但是如果使用这种方式修改自己这个用户密码的时候是需要原密码的,如下:
password system;
3、用户锁定与解锁
alter user c##hr account lock;
alter user c##hr account unlock;
4、分配表空间配额
create user c##hr identified by mrsoft default tablespace users temporary tablespace temp quota 100M on users;
alter user c##hr quota 50M on users;
注意:不能为临时表空间分配配额
5、删除用户
create user c##abc identified by 123;
drop user c##abc;
九、权限
1、系统权限和对象权限
系统权限
数据库级别执行某些操作的权限
create session
create tablespace
create table
create view
Alter命令
Drop命令
一般create、alter、drop都属于系统权限
对象权限
用户对某个特定的数据库对象执行某种操作的权限
指对数据库中的特定对象(如表、视图、序列等)的访问控制权限,以及用户可以在这些数据库对象上执行哪些操作
数据库用户拥有对自己的对象的所有对象权限,所以对象权限管理实际上是对象所有者对其他用户操作该对象的权限管理。
常用权限:增删改查
2、权限授权
Grant 系统权限 to user
Grant 对象权限 on 数据对象 to user
--连接数据库的权限
create user c##mr identified by mrsoft default tablespace users temporary tablespace temp;
grant create session to c##mr;
--创建表权限。
grant create table to c##mr;
--将emp表中的select权限授予c##mr用户
grant select on c##scott.emp to c##mr;
--表上修改数据的权限:
grant update on c##scott.emp to c##mr;
--表上删除数据的权限:
grant delete on c##scott.emp to c##mr;
--表上添加数据的权限:
grant insert on c##scott.emp to c##mr;
一次性授权
--一次性授予查找、修改、删除、添加数据的权限:
grant update,delete,insert,select on c##scott.emp to c##mr;
--或者:
grant all on c##scott.emp to c##mr;
只允许修改工资列:
grant update(sal) on c##scott.emp to c##mr;
给数据库中所有的用户授予相同的权限:
grant update(sal) on c##scott.emp to public;
这里授予相同的权限使用了public,当然不仅仅是update(sal) 权限,换成其他的权限也是可以的。
3、权限授权小测试
1、如果scott将修改emp表的权限给rose用户,该如何操作
2、如果scott希望将对emp表的查询、插入、删除和修改表的权限都给rose ,该如何操作
3、如果只允许rose修改emp表的工资列,该怎么操作
4、如果给数据库中所有用户分配相同的权限,该怎么操作
--答:
--1、
grant update on c##scott.emp to c##rose;
--2、
grant update,delete,insert,select on emp to c##rose;
--或者:
grant all on emp to c##rose;
--3、
grant update(sal) on emp to c##rose;
--4、
grant update(sal) on emp to public;
4、权限的传递
系统权限:
with admin option
对象权限:
with grant option
允许被授予者进一步为其他用户授予权限
create user c##rose identified by rose;
grant create session to c##rose with admin option;
--在创建rose权限的时候允许rose用户再把权限传递给其他人
grant update(sal) on emp to c##rose with grant option;
--注意:不管是授予rose用户系统权限还是对象权限,再使用c##rose用户去给c##mr用户授权的话,那么c##rose用户就与c##mr用户是级联的。
grant update on emp to c##rose with grant option
sqlplus:conn c##rose/rose
sqlplus:grant update on c##scott.emp to c##mr;
--rose用户与mr用户级联
上面是用户权限级联的过程。
5、撤销权限
revoke 权限 from user
create user c##rose identified by rose;
grant create session to c##rose with admin option;
grant insert on c##scott.emp to c##rose with grant option;
revoke insert on c##scott.emp from c##rose;
revoke create session from c##rose;
级联问题:如果对象是用with grant option授予的,则撤销对象权限也将导致级联撤销
十、角色
1、预定义角色
connect:登录数据库,执行查询语句和操作
resource:create table,对该表的所有权限
DBA:执行某些授权命令、创建表,以及对任何表的数据进行操纵。它包括了上面两种角色的操作。
DBA权限相当于管理员的权限,包含了connect、resource所有权限,一般不要把DBA权限给用户。
2、创建自定义角色
--不验证:
create role 角色名
--数据库验证:
Create role 角色名 identified by 密码
创建角色、授予角色权限过程:
--1、创建角色
create role c##role;
--2、角色授权
grant create session,create table to c##role;
--3、创建用户
create user c##abc identified by abc;
--4、将角色授予用户
grant c##role to c##abc;
grant connect,resource to c##abc;
--把角色再次授予角色也是可以的:
--1、再创建角色:
create role c##role2;
--将角色c##role 授予角色c##role2
grant c##role to c##role2;
对象权限给了用户用户就有了,而系统权限必须重新连接用户才能获得权限。
回收权限
revoke create session,create table from c##role;
注意事项:
对象权限只能单独授权和单独回收
系统权限和角色可以在一条语句中完成授权和回收
一个用户可以被授予多个角色
一个角色也可以被授予多个用户
一个角色还可以被授予另一个角色
3、删除角色
drop role c##role;
drop role c##role2;
十一、事务
1、回滚事务
commit 提交事务
rollback 回滚事务
savepoint 保存点
撤销对数据库进行的全部操作。
保存点(回退点):在含有较多sql语句的事务中间设定的回滚标记。
利用保存点可以将事务划分成若干部分,这样回滚时就不必回滚整个事务,而可以回滚到指定的保存点,有更大的灵活性
savepoint a;
delete from emp where empno=1111;
savepoint b;
delete from emp where empno=7902;
rollback to a;
执行没有“TO”回滚子句的ROLLBACK语句,它实现如下功能:
结束事务;
撤销事务中所有对数据库的修改;
清除事务中设置的所有保留点;
释放事务中的加锁;
执行包含“TO”保留点子句的ROLLBACK语句,它完成如下操作:
只回滚保留点之后的那部分事务;
撤销该保留点之后所设置的保留点;
释放该保留点之后所施加的表锁和行锁;