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存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
随机推荐
- GitHub排名TOP30的机器学习开源项目/贪心学院
对于机器学习者来说,阅读开源代码并基于代码构建自己的项目,是一个非常有效的学习方法.看看以下这些Github上平均star为3558的开源项目,你错了哪些? 1. FastText:快速文本表示和文本 ...
- 安装VMware虚拟机和centos操作系统
1,安装包:百度网盘: 2,安装教程:https://blog.csdn.net/qq_31362105/article/details/80706096 配置好操作系统,内存,网络等: 3,Cen ...
- golang gorm框架的默认时区问题
gorm框架的时区是在连接数据库时设置的, 如下
- android: Android 权限管理小结
一. 概述 感谢郭神,自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有 ...
- Markdown使用TOC自动生成导航栏
经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是 轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件: https:/ ...
- oracle赋予一个用户具有查询另一个用户所有表数据
一 以需要被查询的用户登录oracle(假如为A) B为要查询A用户下的表的用户 二 执行查询语句: select 'grant select on A.'|| tname ||' to B ...
- Android学习笔记之View
转载: 0.7562018.10.22 21:44:10字数 5,423阅读 189 导图 一.View事件体系 1.什么是 View 和 View的位置坐标 View是什么: View 是一种界 ...
- iOS实现图片无限轮播之使用第三方库SDCycleScrollView(转)
下载链接:github不断更新地址:https://github.com/gsdios/SDCycleScrollView #import "ViewController.h" # ...
- python使用socket向客户端发送数据的方法
在使用locust测试长连接的时候,所有的请求全部faillure了,所以想到手动写一个连接脚本测试一下是否能连通 因为centos7自带python2.7所以用python写一个比较方便. #!/u ...
- cocos2dx图片加密解密(npk方式)
话不多说,直接开始: 准备的工具: 链接:https://pan.baidu.com/s/1Om4kBNWcG2jL_RTsHqqzpQ 提取码:bv7i npkCreate.exe是加密图片的工具, ...