/*
起别名使用双引号 处理特殊字符使用
数据库里的字符串都是使用单引号
*/
/*
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# 7系列,Part 8: in Parameters in参数

    原文:https://blogs.msdn.microsoft.com/mazhou/2018/01/08/c-7-series-part-8-in-parameters/ 背景 默认情况下,方法参数 ...

  2. hadoop集群搭建教程

    1. 相关软件准备: VMware-workstation-full-15.0.4-12990004.exe CentOS-7-x86_64-DVD-1810.iso jdk-8u231-linux- ...

  3. python3内置函数回忆

    1.数学运算类 # 1.数学运算类 # abs:计算绝对值 print(abs(-23)) # divmod,返回一个tuple,第一个值为商,第二个值为余数 print(divmod(10,4)) ...

  4. Spring Boot Quartz 分布式集群任务调度实现

    Spring Boot Quartz 主要内容 Spring Scheduler 框架 Quartz 框架,功能强大,配置灵活 Quartz 集群 mysql 持久化定时任务脚本(tables_mys ...

  5. Prometheus学习系列(九)之Prometheus 联盟、迁移

    前言 本文来自Prometheus官网手册 和 Prometheus简介 FEDERATION 允许Prometheus服务器从另一台Prometheus服务器抓取选定的时间序列. 一,用例 联盟有不 ...

  6. 易优CMS:compare的基础用法

    [基础用法] 名称:compare 功能:简单的变量比较,复杂的判断条件可以用if标签替换,比较标签是一组标签的集合,基本上用法 都一致. 语法: {eyou:比较标签 name='变量' value ...

  7. ES6中常用的小技巧,用了事半功倍哦

    ES6中常用的小技巧,如果能在实际项目中能使用到,必定事半功倍: 1. 强制要求参数 ES6提供了默认参数值机制,允许你为参数设置默认值,防止在函数被调用时没有传入这些参数. 在下面的例子中,我们写了 ...

  8. Hive 时间函数总结【转】

    1.日期函数UNIX时间戳转日期函数: from_unixtime语法:from_unixtime(bigint unixtime[, stringformat]) 返回值: string说明: 转化 ...

  9. MySQL数据库~~~~~锁和事务

    一 锁 innodb存储引擎默认是行级锁 行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的.由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予 ...

  10. (办公)记事本_Linux目录和文件都能操作的命令

    参考谷粒学院Linux:http://www.gulixueyuan.com/course/300/task/7082/show .cp 1.1.作用主要是拷贝,可以拷贝文件或者目录. 1.2.语法: ...