/*
起别名使用双引号 处理特殊字符使用
数据库里的字符串都是使用单引号
*/
/*
DDL语句 是数据定义语言 使用语句创建数据库的对象
表空间 是实例分配的一块空间 用于开发使用
创建语法: create tablespace 表空间名
datafile 文件的路径
size 文件大小
autoextend on
next 扩展大小
*/
--演示表空间创建 需要使用管理员操作
create tablespace baidu
datafile 'c:\baidu.dbf'---linux系统
size 100m
autoextend on
next 10m
---------------------------------
/*
开发使用管理员创建分配的用户
用户的创建
create user 用户名
identified by 密码
default tablespace 表空间名 */
---创建用户
create user baidu
identified by baidu
default tablespace baidu
--创建完成用户 登陆测试 缺少权限
/*
授权语法:
grant 权限 to 用户
权限的分类
connect 连接的权限可以连接数据库
resource 高级一点的权限 可以建表
dba 最高级的权限 相当于管理员
*/
---授权connect给baidu用户 测试登陆
grant connect to baidu
--授予dba权限
grant dba to baidu
------
create table p(
pid number(9),
pname varchar(10)
)
---------------------------------------------------------------
---plsql developer 图形化工具 instanclient
/*
对表结构的设计
表中含有多少个字段 根据需求来
表中字段都是什么数据类型
主键外键 约束 数据类型
数值类型
int double bigint --mySql支持的数据类型
number(16,v2) v1是数值的总长度 v2是数值的小数位数 默认为0
number(6,2)---9999.99
字符类型
char() --固定长度的字符类型 char(20) zs
实际长度是 2 占用空间 20个长度
varchar() --可变长度的字符类型 varchar(20) zs 张三 utf8 6 gbk 4
实际长度是 2 占用空间 2个长度
varchar2() --可变长度的字符类型 varchar(20) zs 张三 utf8 6 gbk 4
实际长度是 2 占用空间 2个长度 推荐使用
日期类型
date mySql格式 yyyy-mm-dd
oracle 格式 yyyy-mm-dd hh:mi:ss datetime mySql格式 yyyy-mm-dd hh:mi:ss
oracle 格式 yyyy-mm-dd hh:mi:ss 精确到后面的9位纳秒 大文本类型
clob 字符类型大文本 最大支持4G的长度
数据库存放网页的源代码 blob 二进制类型大文本 最大支持4G的长度 long 长文本 最大支持2g的长度 */
/*
约束
主键约束 primary key 非空加唯一
外键约束 foreign key
唯一约束 unique 唯一
非空约束 not null 非空
检查约束 check (gender in (0,1)) 判断数值是否违反表达式
手动使用关键字指定约束 constraint 约束名称 约束类型(列)
*/
---使用数据类型和约束建表操作
create table person( pid number(11) ,
pname varchar2(11) not null,
phone varchar2(11) unique,
gender number(1) check (gender in (0,1)),
constraint pk_person_pid primary key(pid)
)
---插入数据测试约束 oracel事务必须手动选择提交或者回滚
insert into person values(1,'zs','11122223333',1);
insert into person values(1,'zs','11122223333',1);--违反主键约束
insert into person values(2,'zs','11122223333',1);--违反唯一约束
insert into person values(2,'zs','11122224444',1);
insert into person values(3,null,'11122225555',1);--违反非空约束
insert into person values(3,'','11122225555',1); --空串违反非空约束
insert into person values(3,' ','11122225555',1);
insert into person values(4,'zs','11122226666',3);--违反检查约束
insert into person values(4,'zs','11122226666',0);
commit;
/*
表结构的修改
增加一列 alter table 表名 add(列名 数值类型)
修改一列 alter table 表名 modify(列名 数值类型)
重命名列 alter table 表名 rename column 旧列名 to 新列名
删除一列 alter table 表名 drop column 列名
*/
--给person表增加地址一列
alter table person add(address varchar2(20));
--修改address为char 类型 10个长度
alter table person modify(address char(10));
alter table person modify(pname number(11)); --列如有有数据不可以修改类型 报错
--重命名gender性别为sex
alter table person rename column gender to sex
--删除地址address
alter table person drop column address
/*
DML语句 数据操作语言 对表中数据做增删改
插入数据 insert into 表名 values(.....)
insert into person values(1,'zs',1); --不能插入 列数量不匹配
insert into person(pid,pname,sex) values(1,'zs',1); --指定列名插入数据
修改数据
update 表名 set 列名=值 where 条件 修改满足条件的记录
删除数据
delete from 表名 where 条件 删除匹配的数据 delete from 表名 删除所有记录 一条条删除
效率低 可以加条件
truncate table 表名 摧毁表结构 再重建表结构
效率高 不能加条件
*/
--想使用emp表的数据做测试
select * from emp;
--创建表的同时拷贝表的数据 scott用户下的emp
create table emp as select * from scott.emp;
--修改SMITH用户更改名称为SSSS
update emp set ename='SSSS' where ename='SMITH';
commit;
/*
存在主外键的情况下 直接删除主表的记录
一、 1.先删除从表记录
2.再删除主表记录
二、级联删除 on delete cascade
三、直接删除主表 */
--创建主表订单 orders表
create table orders(
oid number(11) primary key,
oname varchar2(11) ,
oprice number(6,2)
)
--创建字表订单明细表 order_detail
create table order_detail(
detail_id number(11) primary key,
detail_name varchar2(11) ,
detail_price number(6,2),
oid number(11),
constraint fk_detail_oid foreign key(oid) references orders(oid)
-- on delete cascade
)
--插入主表和从表的记录
insert into orders values(1,'订单1',1000);
--insert into order_detail values(1,'订单1',1000,2);--违反外键约束
insert into order_detail values(1,'订单1',1000,1);
commit;
----
select * from orders;
select * from order_detail;
----直接删除主表记录测试
delete from orders where oid=1;
delete from order_detail where detail_id = 1;
commit;
drop table order_detail;
--直接删除主表 强制删除 不建议使用
drop table orders cascade constraint /*
事务 作为一个逻辑操作单元 执行的任务全部成功,或者全部失败
特性:ACID (原子性 持久性 隔离性 一致性)
没有隔离级别 脏读 幻读 不可重复读
调整隔离级别
oracel数据库隔离级别 READ COMMITED ,SERIALIZABLE,READ ONLY
默认隔离级别是READ COMMITED
事务的保存点:
事务保存点的概念: 保存起执行成功的任务
意义:可以保证执行成功的任务正常提交
使用方法:
声明事务保存点 savepoin 保存点名
出现错误回滚到保存点 rollback to 保存点
再继续提交 commit
spring管理事务 在servie层切入点 */
declare begin
insert into orders values(1,'订单1',1000);
insert into orders values(2,'订单1',1000);
insert into orders values(3,'订单1',1000);
insert into orders values(4,'订单1',1000);
insert into orders values(5,'订单1',1000);
savepoint s1; --声明保存点
insert into orders values(6,'订单1',1000);
insert into order_detail values(1,'订单1',1000,100);
commit;
exception
when others then
rollback to s1;
commit;
end; /*
数据库其余对象
视图 是一个虚拟的表 不存放数据 数据来源为原始表
意义是: 为了数据的安全
为了权限的细分
创建视图 查看特定的数据
create view 视图名 as select * from 表
*/
--查看员工信息
select * from emp;
--创建视图
create view emp_view as select empno,ename,job,deptno from emp;
--查询视图
select * from emp_view
--修改视图
update emp_view set ename='SMITH' where ename='SSSS';
commit;
--创建只读的视图
create view e_view as select empno,ename,job,deptno from emp with read only
update e_view set ename='SSSS' where ename='SMITH';
commit;
/*
序列 是oracle数据生成的一系列数值 用来实现 (序列是对象,所以有属性)
表中记录id的自增长
创建序列
create sequence 序列名称
序列的属性
nextval --下一个值
currval --当前值 create sequence sequence
[INCREMENT BY n] 表示自增长,每次增长n个
[START WITH n] 表示初始值,n就是初始值.
[{MAXVALUE n | NOMAXVALUE}] 表示最大值
[{MINVALUE n | NOMINVALUE}] 表示最小值
[{CYCLE | NOCYCLE}] 表示循环 表示如果设置了最大值,当数字达到最大值以后,会进行循环的设置值,这个不适用于自动增长的主键(非空唯一的)
[{CACHE n | NOCACHE}] 表示缓存,表示缓存n个,如果n是10,表示一次缓存10个序列.
*/
--创建序列
create sequence order_sequence select order_sequence.nextval from dual; --序列默认值从1开始 nextval生成不会因为插入失败回退
select order_sequence.currval from dual; --查看当前值 必须先生成nextval insert into orders values(order_sequence.nextval,'订单1',1000);
commit; /*
索引 理解为一本书的目录
没有目录找到特定章节 费时很长 意义:为了提升查询数据的速度(通过id,创建树结构,来提升查询效率)
前提 : 只有数据量非常大的情况下 才有意义
创建索引
单行索引 create index 索引名称 on 表(列)
复合索引 create index 索引名称 on 表(列,列2) create index index_order on orders(oname)
创建索引是在数据库中创建索引结构,放的是索引的列的数值rowid,将oname的数值按照从小到大的排序,
当where oid = 139,通过条件去索引结构定义记录的位置,数据库会通过rowid真实地址去查找数据.
优点 : 提升查询速度.
缺点 : 占用空间.
增删改数据效率降低,需要更新索引结构,如果表中有主键和唯一约束会自动创建索引. 索引使用规范 : 用在于列的数值重复数据很少情况.例如 : 当gender列都是1,会影响索引的查询效率
索引分类 : 常用的是 unique唯一索引,normal普通索引. */
--创建大数据量的表
--序列生成的属性 在同一sql语句中只会生成一次
declare begin
for i in 1..5000000 loop
insert into orders values(order_sequence.nextval,'订单'||order_sequence.nextval,1000);
commit;
end loop;
end;
select count(*) from orders
--先查询数据 记录耗时
select * from orders where oname='订单3333333' --2.234 15 18 19
--创建索引
create index index_order on orders(oname) --一分多钟
--创建索引后 查询同样的记录 耗时
select * from orders where oname='订单3333333' ---0.204
--多个条件作为查询 不是触发单行索引
select * from orders where oname='订单3333333' and oprice=1000
--自动创建索引,根据oid创建的.
select * from orders where oid=4444444
/*
rowid 是数据库在保存数据时候 生成的真实物理地址
区别rownum 是一个伪列 是在查询数据时候才会生成的,可变
rowid 是插入数据就已经生成了 固定的物理地址 唯一不变
*/
--通过以下查询,可以对表进行直接修改.
select rowid,emp.* from emp; /*
同义词 可以理解为一个对象的别名
意义: 为了数据的安全
为了权限的细分
创建同义词
create synonym 同义词名 for 用户.对象
oracel的from后面可以跟同义词,视图,表,这三种对象.
*/
--查询员工表
select * from scott.emp;
create synonym syn_emp for scott.emp;
---查询同义词
select * from syn_emp /* 数据库的导入导出 1.为了数据安全 备份和还原使用 2.为了服务器的迁移 把以前旧服务器的整个数据库迁移到新服务器 3.开发人员的操作 是为了部署项目导入表结构 开发是在测试环境 开发完成 需要上线
代码 上传到服务器 tomcat
开发的数据库表 上传到服务器数据库
去数据库建表 直接new 有风险
公司里一般都是 导出新建的表结构 通过命令运行
导入导出实现
通过命令行导入导出 需要安装oracel数据库服务器
导出命令 exp
整个数据库导入 exp 用户名/密码 file=文件.dmp full = y
按照用户导出 exp 用户名/密码 owner= 用户 file=文件.dmp
按照表来导出 exp 用户名/密码 file=文件.dmp tables=表名,表名2
导入 将exp 换成 imp
通过图形化工具导入导出
tools --export user objects 导出表结构 不能备份数据 包含所有的对象 tools --exprot tables 导出表可以备份结构和数据 默认情况只能备份数据
oracel数据库格式 .dmp文件 服务器才能做
sql文件格式 .sql文件
图形化工具格式 .pde文件

Oracle数据库之第三篇的更多相关文章

  1. Oracle数据库备份与恢复的三种方法

    转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出 ...

  2. 对学Oracle数据库初学者的开场篇

    前言:因为项目原因,近期开始学习Oracle数据库.Oracle是目前最流行的数据库之一,功能强大,性能卓越,相对的学习的难度还是不小.我打算将自己的学习过程记录下来,做个积累,方便自己和其他的学习者 ...

  3. Oracle数据库学习(三):Oracle数据库的环境配置与安装

    1.解压oracle安装包 将oracle的安装包和补丁包都存放在/home/oracle/soft目录下,然后对其进行解压,建议以root权限进行解压. unzip p13390677_112040 ...

  4. Oracle数据库基本操作(三) —— DQL相关内容说明及应用

    本文所使用的查询表来源于oracle数据中scott用户中的emp员工表和dept部门表. 一.基本语法 SQL语句的编写顺序: select 输出的列 from 表名 where 条件 group ...

  5. Oracle数据库之第四篇

    /* 授权命令 grant 权限 to 用户 授权可以授予多个权限 grant connect,resource to baidu 收回权限 revoke 权限 from 用户 revoke dba ...

  6. Oracle数据库分页的三种方法

    -- 不能对ROWNUM使用>(大于1的数值).>=(大于或等于1的数值).=(大于或等于1的数值),否则无结果-- 所以直接用只能从1开始-- rownum >10 没有记录,因为 ...

  7. Oracle 数据库基础学习 (三) Oracle 四个表结构

    Oracle 四个表的 emp dept  salgrade  bunus 的结构,记住有利于后期SQL语句的学习 雇员表(emp) No. 字段 类型 描述 1 empno NUMBER(4) 表示 ...

  8. Oracle数据库学习(三)

    6.关于null 数据库中null是一个未知数,没有任何值:进行运算时使用nvl,但是结果仍为空:在聚集函数中只有全部记录为空才会返回null. 7.insert插入 (1)单行记录插入 insert ...

  9. Oracle数据库三种备份方案

    Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份.导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/导入(Export/Import) 利用 ...

随机推荐

  1. c++-内联函数和函数重载和默认参数和函数指针

    内联函数 C++ 内联函数是通常与类一起使用.如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方. 对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编 ...

  2. Springboot Activiti6 工作流 集成代码生成器 shiro 权限 vue.js html 跨域 前后分离

    官网:www.fhadmin.org 特别注意: Springboot 工作流  前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0 ...

  3. Android BGradualProgress 多种渐变、直角or弧角、进度条、加载条

    可实现多种渐变.直角or弧角.进度条.加载条 (Various gradient, right or arc angle, progress bar and loading bar can be re ...

  4. R语言学习-基础篇1

    ###第一周:R基础 rm(list = ls())  #ctr+L###矩阵相乘,函数diag()a=matrix(1:12,nrow=3,ncol=4)b=matrix(1:12,nrow=4,n ...

  5. Appium(十):元素定位(加强版)

    1. 元素定位 写完上一篇元素定位的博客,发现实用性基本为零.这几天真的烦死我了,一直在找资料,还去看了一遍appium官网文档.最后结合着selenium的定位方法,测试出几种可行的元素定位方法. ...

  6. 【原创】你的Redis怎么持久化的

    引言 (本文改编自生活真实案例,如有类同,绝不是巧合!) 端午节,烟哥正在一边愉快的学习.... 突然,微信一阵抖动.原来是老刘呼唤烟哥!善良的烟哥本以为人家是要约我出去玩!然而,打开微信一看,出现下 ...

  7. 想精通分布式以及高并发架构?那你得先搞定ZooKeeper架构原理!

    Zookeeper是分布式一致性问题的工业解决方案,是Apache Hadoop下解决分布式一致性的一个组件,后被分离出来成为Apache的顶级项目. 工程来源:是雅虎公司内部项目,据说雅虎内部很多项 ...

  8. Dubbo学习笔记-RPC扩展和本地Mock

    1.Dubbo介绍 Dubbo,一个是一款高性能Java RPC框架.私以为有中文官方文档,就不再重复介绍了 2.RPC扩展-本地存根stub RPC扩展功能:提前效验参数,缓存调用结果,日志记录等等 ...

  9. 魔兽争霸RPG地图开发速成教程

    魔兽争霸RPG地图开发速成教程 1 打开WE编辑器 下载地址  http://rpg.dz.blizzard.cn/authors-home/editor-download 然后新建地图 2  打开工 ...

  10. 从零开始手写 dubbo rpc 框架

    rpc rpc 是基于 netty 实现的 java rpc 框架,类似于 dubbo. 主要用于个人学习,由渐入深,理解 rpc 的底层实现原理. 前言 工作至今,接触 rpc 框架已经有很长时间. ...