/*
起别名使用双引号 处理特殊字符使用
数据库里的字符串都是使用单引号
*/
/*
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. 电商设计V1(一):软件工程设计

    软件工程设计的方式方法 多视图法: 全面分析软件方方面面的问题 尽早地发现和排除项目风险与不确定因素 从不同角度去展现要设计的软件系统 为项目进行不同的干系人提供指导: 逻辑架构描述系统功能,并指导系 ...

  2. 一步一步解决centos6.5配置无线网卡的问题

    1.配置本地yum源 [local] name=local baseurl=file:///mnt/cdrom enable=1 gpgcheck=0 2.安装libnl rpm -ivh /mnt/ ...

  3. .Net配置Ajax跨域访问

    1.在web.config文件中的 system.webServer 节点下 增加如下配置 <httpProtocol> <customHeaders> <add nam ...

  4. 基于Tomcat的GeoServer部署步骤

    一.安装JAVA 资源:JDK1.8 提取码:0y26 步骤: 1.安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置": 2. ...

  5. docker拉取慢(net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting head)

    systemctl restart docker在docker-hub拉取慢,因为服务器在外网 直接配置阿里云镜像就可以 首先: vim /etc/docker/daemon.json加入下面的那句 ...

  6. 【转】浅谈命令查询职责分离(CQRS)模式

    原文链接:https://www.cnblogs.com/yangecnu/p/Introduction-CQRS.html 在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查 ...

  7. Android——application全局类的使用

    目录 1.概述 2.Application基类 3.自定义Application类 4.Application的生命周期 5.Application对象的回调函数 6.Application对象的作用 ...

  8. 中国古风唯美水墨工作计划汇报PPT模板推荐

    模版来源:http://ppt.dede58.com/

  9. [转]UiPath Studio Community如何连接orchestrator (Level2讲解)

    本文转自:https://mp.weixin.qq.com/s/_IWsUB94nT0QwQ6t1IK0Dg https://blog.csdn.net/weixin_45000314/article ...

  10. C lang:The smallest negative plus one equals the largest positive