---------------------------------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.truncate和delete区别
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