oracle练习-day03

China☆狼群 提交于 2020-01-15 22:34:52

---------------------------------Oracle day03----------------------------------
--01.创建表空间
--删除表空间
drop tablespace heima38_space including contents and datafiles;
--创建表空间
create tablespace heima38_space --表空间名称
datafile 'c:\heima.dbf'         --表空间的对应的文件路径
size     10M                    --表空间初始化的大小
autoextend on                   --自动增长
next 10M                        --每次增长10M
--02.创建用户赋权限
create user heima38 identified by heima38;
--为用户授权
oracle角色权限
connect:连接数据库权限
resource:数据库基本操作的权限
dba:数据库管理员的权限
--为heima38授予dba权限
grant dba to heima38;
--实现的项目中为heima授予
grant connect,resource to heima38;
--删除用户
drop user heima38;

--通过查询语句查询当前用户拥有哪些权限
select *from session_privs

----------------------------------以上都是通过system账号创建------------------------------------------------
--03.创建表
语法:
create table 表名
(
       列名 数据类型(长度) 约束,
       列名 数据类型(长度) 约束
)
--04.常见的数据类型
--字符型
char: 固定字符串长度 最大2000字符             myname char(10) --'Tom' 长度:10
varchar2:推荐使用这个 可变长度最大4000字符    myname varchar2(10) --'Tom' 长度:3
varchar:可变长度最大4000字符                  myname varchar(10) --'Tom' 长度:3

--数值型
number:存放数值         price number(3,2) --3:总长度 2:小数点后2位 最大值:9.99  最小值 -9.99

--日期型
mysql中datetime 跟 oracle中date一样使用  数据格式:'yyyy-mm-dd hh24:mi:ss'
timestamp 时间戳 精确非常高 秒后9 'yyyy-mm-dd hh24:mi:ss.123456789' 
--'2018/08/14 09:16:22.123456789' --秒杀
--大数据类型
oracle中数据类型
blob:二进制数据 存4G
clob:字符串可以达到4G
long:字符串可以达到2G

--05.创建表以及5种单表约束
约束:
非空约束:not null
主键约束:primary key
检查约束:check (字段名 in(0,1))--sex
唯一约束:unique 
外键约束: constraint 外键名称 foreign key(外键表列名) references 主表名(主键id) 

--创建表
drop table t_person;
create table t_person
(
       pid number(10) primary key,--主键id 主键约束
       pname varchar2(30) not null,--非空约束
       psex char(1) check(psex in(0,1)),--检查约束
       ptelephone varchar2(11) unique--唯一约束
);
--测试约束
insert into t_person values(2,'小王2',0,'14666666666');
commit;--提交数据

问题:提示不够准确
drop table t_person;
create table t_person
(
       pid number(10),--主键id 主键约束
       pname varchar2(30) not null,--非空约束
       psex char(1),--检查约束
       ptelephone varchar2(11),--唯一约束
       constraint pk_pid primary key(pid),
       constraint check_sex check(psex in(0,1)),
       constraint unique_telephone unique(ptelephone)
);
--测试约束
insert into t_person values(3,'小王2',2,'13666666666');
commit;--提交数据

--06.修改表结构
增加字段:alter table t_person add address varchar2(10)
修改字段:alter table t_person modify address varchar2(200)
删除字段:alter table t_person drop column address
应用场景:系统已经上线后,在已有的表的基础上做修改

--07.创建表双引号使用的问题
oracle中 双引号使用的:别名 表名 列名
drop table "t_Test";
create table "t_Test"
(
       "id" number(10),
       "name" varchar2(30)
);
insert into "t_Test" values(1,'小王');
commit;
--查询
select * from "t_Test" where "id" = 1;
delete from "t_Test" where "id"=1;
truncate table  "t_Test"

--08.truncatedelete区别
delete:
执行删除可以回滚
执行delete可以加条件
可以删除单条数据也可以删除多条数据
delete效率没有truncate高,因为产生磁盘碎片
truncate:
执行删除不可以回滚
执行truncate不可以加条件
删除整个表的数据
truncate效率比delete高,不会产生磁盘碎片(直接摧毁表结构,重建一个表)

--09.事务和事务保存点
什么是事务?
mysql事务默认的隔离级别:可重复读
oracle事务默认的隔离级别:可以读取已经提交的数据

--事务保存点
语法:
设置事务保存点 savepoint 事务保存点名称
回滚到事务保存点 rollback to 事务保存点名称

--测试
truncate table t_person;
--往表中插入数据

insert into t_person values(5,'小王5','1','14666666');
insert into t_person values(6,'小王6','0','15666666');
savepoint b;
insert into t_person values(3,'小王3','0','12666666');
insert into t_person values(4,'小王4','0','13666666');
savepoint a;
insert into t_person values(4,'小王4','0','13666666');
rollback to a;
commit;
select * from t_person;

--实际应用场景



--10.快速建表(给NEW YOEK 地区的所有员工涨100工资)
--需求:通过快速建表的方式 将 scott用户下emp和dept表 建立 heima38用户下
快速建表可以将表结构和表中的数据全部复制过来
语法:create table 表名 as 查询语句 
create table myemp as select * from scott.emp;
create table mydept as select * from scott.dept;
--NEW YOEK 地区的所有员工涨100工资
查询几张表 myemp mydept 
更新那一列? sal
过滤条件:给NEW YOEK 地区
--NEW YOEK 地区的所有员工查询出来
select * from myemp e where e.deptno =(
select deptno from mydept d where d.loc = 'NEW YORK')
--NEW YOEK 地区员工涨100工资

update myemp set sal=sal+100 where deptno =(
select deptno from mydept d where d.loc = 'NEW YORK')
--11.视图
什么是视图?
它是一个虚表(实际并不存在这个表)
为什么要用?
1.为了封装复杂的查询语句
2.隐藏敏感字段
怎么用?
语法 create [or replace] view 视图名称 as 查询语句;
--为了封装复杂的查询语句
create view view_myemp as 
select sum(count(*)) Total,
  sum(decode(to_char(e.hiredate,'yyyy'),'1980',count(*))) "1980",
  sum(decode(to_char(e.hiredate,'yyyy'),'1981',count(*))) "1981"
  sum(decode(to_char(e.hiredate,'yyyy'),'1982',count(*))) "1982",  
  sum(decode(to_char(e.hiredate,'yyyy'),'1987',count(*))) "1987"  
  from myemp e group by to_char(e.hiredate,'yyyy')

--隐藏敏感字段
create or replace view view_myemp as
select e.ename,e.job from myemp e;

--查询视图  
select * from view_myemp

--更新视图中的数据(不推荐使用)
update view_myemp set job = 'abc' where ename='S_MITH';
--一般在创建视图的视图 指定只读
--12.只读视图
create or replace view view_myemp as
select e.ename,e.job from myemp e with read only;

update view_myemp set job = 'abc' where ename='S_MITH';

--13.序列
什么是序列?
类似于mysql主键自增,序列主要提供表中主键id去使用的
如何去使用序列?
create sequence 序列名称;--最简单的语法
--需求:为person表创建序列,并往表中插入数据进行测试
--创建序列
--为person这个表创建一个序列

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!