oracle学习笔记03
一:表空间
/*
创建表空间:逻辑单位,通常我们新建一个项目,就会去创建表空间,在表空间中创建用户,用户去创建表。
语法:create tablespace 表空间名字
datafile '文件的路径(服务器上的)'
size 大小
autoextend on 自动扩展
next 每次扩展的大小
*/
--切换到system用户
--创建一个表空间prod_dm
create tablespace prod_dm
datafile 'D:\app\prod_dm.dbf'
size 100m
autoextend on
next 10m;
--D:\app\prod_dm.dbf 会自动产生一个文件,大小100MB,占用空间100MB
--删除表空间
drop tablespace prod_dm; --删除逻辑关系,文件还存在,手动删除
--查看用户表空间情况,需要有resource角色权限
select tablespace_name,sum(bytes)/1024/1024 || 'MB' FROM user_free_space group by tablespace_name;
二 创建用户
/*
创建用户:
create user 用户名
identified by 密码
default tablespace 表空间的名字
*/
--创建用户
create user prod_dm
identified by dm_passwd
default tablespace prod_dm;
--现在可以用prod_dm登录,但是会报错 ORA-01045: user lacks CREATE SESSION privilege
/*
oracle中已经存在3个重要的角色:connect角色,resource角色,dba角色
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授出。
授权语法:grant 角色|权限 to 用户名;
--授权create session的权限,resource角色
grant create session,resource to 用户名;
*/
grant connect to prod_dm; --执行
三 数据类型
/*常用列的类型
varchar2(长度) 可变长度 varchar2(10) hello 占5个字符
char(长度) 固定长度 varchar(10) hello 占10个字符,用空格填充
number(总长度,小数长度) 数字类型
date 年月日时分秒
timestamp 时间戳
*/
select current_date from dual;
select current_timestamp from dual;
--使用子查询方式创建表
create table test2 as select * from emp;
四:修改表
/*
修改表:
添加列
修改列 varchar2(10)
删除列
修改列名
重命名表
SQL分类:
*/
--创建表
create table stu(
stuid number primary key ,
sname varchar(10)
);
--添加列add
alter table stu add phone varchar2(11);
--添加2列
alter table stu add (
sex varchar2(2),
address varchar2(2)
);
--修改列的类型modify
--把sex列的类型长度2修改为4
alter table stu modify sex varchar(4);
--修改列名 alter table 表名 rename column 旧列明 to 新列名;
--把sex列修改为gender
alter table stu rename column sex to gender;
--删除列 alter table 表名 drop column 列名;
--删除gender列
alter table stu drop column gender;
--修改表名 rename 旧表名 to 新表名;
rename stu to student;
--删除表
drop table student;
五:表的约束
/*表的五大约束
列的约束:约束主要是用来约束表中数据的规则
1:主键约束
2:非空约束
3:唯一约束
4:检查约束
5:外键约束:主要是用来约束从表product1中的记录,此记录必须存在于主表categoty1中
*/
--性别:男女不详
create table student(
student number primary key,
sname varchar2(10) unique,
age varchar2(4) not null,
gender varchar2(4) check( gender in ('男','女','不详'))
);
--主键约束违反
insert into student values(1,'张三','30','男');
insert into student values(1,'李四','31','男');
--回滚
--唯一约束违反
insert into student values(1,'诸葛','30','男');
insert into student values(2,'诸葛','31','男');
--非空约束
insert into student values(1,'诸葛','','男');
insert into student values(2,'周瑜',null,'男');
--检查约束
insert into student values(2,'周瑜','31','你好');
--外键约束
/*
商品分类,商品表
*/
--创建商品分类表 主表
create table category1(
cid number primary key,
cname varchar2(20)
);
--创建商品表 从表
create table product1(
pid number primary key,
pname varchar2(20),
cnumber number
);
insert into category1 values (1,'手机数码');
insert into product1 values(10,'apple',11); --插入这个11,没有意义,但是可以插入,所以需要添加外键约束
select * from category1;
select * from product1;
--添加外键约束
alter table product1 add foreign key (cnumber) references category1(cid); --之前有问题的数据没有删掉,所以会报错
--下面删除有问题的数据
truncate table product1;
truncate table category1;
--删除含有外键的表
drop table tablename cascade constraints;
六:更新数据和删除数据
/*
update 表名 set 列名 =列的值 where 条件
delete from 表名 where 条件
*/
七:事务
/*事务:就是一系列的操作,要么都成功,要么都失败
四大特性:原子性,隔离性,一致性,持久性
如果不考虑隔离级别:脏读,虚读,不可重复读
Mysql隔离级别:Read Uncommitted(读取未提交内容),Read Committed(读取提交内容),Repeatable Read(可重读)--默认事务隔离级别 ,Serializable(可串行化)
ORACLE隔离级别: read committed--默认的,serializable, read-only
提交:commit
事务的保存点/回滚点: savepoint 保存点的名字
回滚:rollback
rollback to 保存点名字
*/
八: 视图
/*
视图:是对查询结果的一种封装。视图里的所有数据,都是来源于原表。视图本身不存储任何数据。
作用:1:能够封装复杂的查询结果
2:屏蔽表中的细节
语法: create [or replace ] view 视图的名称 as 查询语句 [with read only]
--一般加上with read only
*/
--查询员工表
select * from emp;
--创建一个视图,视图可以理解成一个窗户,显示特定的大小,显示数据
--存在就替换 or replace
create or replace view view_test1 as select ename,job,mgr from emp;
--授权才能创建视图
grant create view to scott;
--查询视图
select * from view_test1;
--通过视图修改数据--不建议使用视图修改数据
update view_test1 set ename='SMITH2' where ename='SMITH';
select * from view_test1;
--创建一个只读视图
create or replace view view_test2 as select ename,job,mgr from emp with read only;
select * from view_test2;
update view_test2 set ename='SMITH1' where ename='SMITH2'; --不能修改只读视图
九:序列
/*
序列:生成类似于mysql中auto_increment 这种ID自动增长的数值
oracle 语法:
create sequence 序列的名字
start with 从几开始
increment by 每次递增多少
maxvalue 最大值 |nomaxvalue
minvalue 最小值 |nominvalue
cycle | nocycle --是否循环1,2,3,1,2,3
cache 缓存的数量
如何从序列中获取值:
currval:当前值 --注意:currval需要在调用一次nextval之后才能调用
nextval:下一个值
*/
--创建一个序列1,2,3,4,5...30 ,循环
create sequence seq_test001
start with 1
increment by 2
maxvalue 30
cycle
cache 10;
--测试
select seq_test001.currval from dual; --报错,虚要调用一次nextval
select seq_test001.nextval from dual; --1
select seq_test001.currval from dual; --1
select seq_test001.nextval from dual; --3
select seq_test001.currval from dual; --3
--序列用的最多的写法
create sequence seq_test002;
select seq_test002.nextval from dual;
10:索引
/*
索引:在数据量比较大的情况下,如果某一列经常作为查询条件,就可以创建索引,提高查询效率
语法:
create index 索引的名称 on 表名(列);
注意:主键约束自带主键索引,唯一约束自带唯一索引。
*/
--测试
--插入500万条数据
declare
begin
for i in 1..5000000 loop
insert into FiveMillion values('姓名'|| i,'地址'|| i);
end loop;
commit;
end;
--test
--在没有索引的情况下,查询 name='姓名3000000'
select * from FiveMillion where name='姓名3000000'; --0.086seconds
--创建索引name,再去查询name='姓名3000000'
create index ind_FiveMillion on FiveMillion(name); --32.256seconds
select * from FiveMillion where name='姓名3000000'; --0.044 seconds 速度变快了一倍
--创建复合索引
create index ind_FiveMillion2 on FiveMillion(name,address);
select * from FiveMillion where name='姓名3000000' and address='地址3000000';
/*SQL语句F5:explain plan 查看指标
1:cost CPU调用的次数
2:cardinality 影响的行数
*/
--索引的原理:平衡二叉树 btree blance tree
--如果某一列作为查询条件的时候,索引可以提高查询效率,但是插入数据的时候,会变慢。
--索引创建之后,过一段时间之后,DBA重构索引。
oracle学习笔记03的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- oracle学习笔记第一天
oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字 1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...
- 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试
机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...
- OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓
本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl 使用图片为 Mjolnir_Round_Car_Magnet_300x300.jpg 代码如下: impor ...
- OpenCV 学习笔记03 findContours函数
opencv-python 4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...
- Oracle学习笔记——点滴汇总
Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster
- Oracle学习笔记之四sp1,Oracle 11g的常用函数
从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i) 分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...
- Oracle学习笔记之四,SQL语言入门
1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
随机推荐
- 虚拟Linux系统使用Windows系统oracle数据库
前提:本地oracle数据库能正常使用. 数据库:oracle 11g 虚拟机:VMware_workstation_full_12.5.2 本机系统:Windows 7 旗舰版 虚拟机系统:open ...
- Flutter移动电商实战 --(38)路由_Fluro中Handler编写方法
在main.dart中初始化Fluro 编写handler 在lib下新建routers文件夹,表示里面要很多路由相关的文件 我们声明一个Handler,在里面handlerFunc固定的两个参数 重 ...
- js es6遍历对象的6种方法(应用中推荐前三种)
javaScript遍历对象总结 1.for … in 循环遍历对象自身的和继承的可枚举属性(循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).). 2.使用Object.keys ...
- 十个Python爬虫武器库示例,十个爬虫框架,十种实现爬虫的方法!
一般比价小型的爬虫需求,我是直接使用requests库 + bs4就解决了,再麻烦点就使用selenium解决js的异步 加载问题.相对比较大型的需求才使用框架,主要是便于管理以及扩展等. 1.Scr ...
- delphi type
声明: 1. type Name = Existing type; 2. type Name = type Existing type; 3. type Name = (EnumValue1 [=va ...
- Re-ranking Person Re-identification with k-reciprocal Encoding
Re-ranking Person Re-identification with k-reciprocal Encoding Abstract In this paper, we propose a ...
- ps命令入门使用指南
声明:本文算不上原创,主要是参考和整理了该博客ps命令详解 Shell 命令: ps [options] [--help] ps 常用参数: l 长格式输出: u 按用户名和启动时间的顺序来显示进程: ...
- exchange 2010入门到精通
exchange 2010入门到精通 Exchange产品介绍和功能演示 Exchange是什么 目前最受欢迎企业级邮件服务器产品 市场占有率70%(2011数据) 微软消息协作平台中核心产品 Exc ...
- ffmpeg学习笔记-native原生绘制
上次已将ffmpeg的动态库编译出来了,并且使用了ffmpeg的转码功能,成功将mp4格式视频转化为yuv视频,这篇文章基于上次测试的demo,使用surfaceview显示解码完成的像素数据 布局设 ...
- Rocketmq-简单部署
一.准备环境 1.系统:Centos7.3(无硬性要求) 2. jdk:1.8 3.maven:3.5(无硬性要求) 4.git 5.rocketmq 4.2 二.环境部署 1.jdk1.8以及mav ...