Oracle数据库基本操作(一) —— Oracle数据库体系结构介绍、DDL、DCL、DML
一、Oracle数据库介绍
1、基本介绍
Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。
2、Oracle数据库的体系结构
①数据库:database
Oracle数据库是数据的物理存储。这包括(数据文件ORA或DBF、控制文件、联机日志、参数文件)。Oracle数据的概念和其他数据库不一样,这里的数据库是一个操作系统只有一个库。可以看做是Oracle就只有一个大数据库。
②实例
一个Oracle实例(Oracle Instance)有一系列的后台进程和内存结果组成。一个数据库可以有N个实例。
③数据文件(dbf)
数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属与的表空间才行。
④表空间
表空间是Oracle对物理数据库上相关数据文件(ORA或者DBF文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为system表空间)。
每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间。
⑤用户
用户是在实例下建立的。不同实例中可以建相同名字的用户。
注:表的数据,是有用户放入某个表空间的,而这个表空间会随机吧这些表数据放到一个或者多个数据文件中。
由于Oracle的数据库不是普通的概念,Oracle是由用户和表空间对数据进行管理和存放的。但是表不是有表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表,这里区分就是用户了。
Oracle数据库【地球】可以有多个实例【亚洲、欧洲等等】,而每个实例【亚洲】可以分为多个表空间(逻辑上,人为的)【中国、印度、巴基斯坦等等】,每个表空间可以存在多个用户【中国(表空间),省政府(用户)】,每个用户【【省政府】管理该表空间下的指定数据文件【下辖土地】。
二、Oracle数据库基本操作
DDL ( Data Definition Language 数据定义语言)语句:用来定义数据库对象(库、表、列等),创建、删除、修改库、表结构。
DML(Data Manipulation Language 数据操作语言 ) 语言:用来定义数据库记录(数据),增、删、改表记录;
DCL(Data Control Language 数据控制语言)语言:用来调用访问权限和安全级别;
DQL(Data Query Language 数据查询语言)语言:用来查询记录(数据);
(一)DDL语句管理表
假设要开发一个项目: 1. 创建表空间 2. 创建用户(授权) 3. 用户去建表
1、创建表空间(由管理员账号创建)
语法:
create tablespace 表空间的名称
datafile '存放的位置' //指定表空间对应的数据文件存放位置
size 初始大小
autoextend on //自动增长,当表空间存储都占满时,自动增长
next 每次增长多少
示例:
create tablespace mallproject
datafile 'c:\mallproject.dbf'
size 100m
autoextend on
next 10m;
--删除表空间
drop tablespace mallproject;
2、创建用户
①创建用户语法:
create user 用户名 identified by 密码 default tablespace mallproject
密码必须不能以数字及特殊开头。
示例:
create user zhansan identified by zs123 default tablespace mallproject;
②用户授权:
--授权DCL:grant
--授权zhansan拥有创建会话权限
grant create session to zhansan;
Oracle 中已存在三个重要的角色:connect角色(是授予最终用户的典型权利,最基本的),resource角色(是授予开发人员的),dba角色(拥有全部特权,是系统最高权限,只有DBA才可以创建数据结构,并且系统权限也需要DBA授出,且DBA用户可以操作全体用户的任意基表,包括删除)。
-- 授予角色
grant dba to zhansan;
-- 登录zhansan账号,可操作任意用户的表
select * from scott.emp;
③撤销已经授予的权限语法
revoke {system privilege | role | all [privileges] } [,{system privilege | role | all [privileges] }...] from {user | role} [,{{user | role}}]...;
④删除用户及用户下的数据
drop user 用户名 cascade;
-- 删除zhansan用户及其下的数据
drop user ZHANSAN cascade;
3、创建表
①语法:
create table 表名(
列名 列的类型 [列的约束],
列名 列的类型 [列的约束]
);
②列的类型:
- varchar2(总长度) : 表示的可变长度字符串,但是不能超过最大长度
- varchar2(10) : 占5个长度字符
- char(总长度) : 表示的固定的长度字符串
- char(10) : 不满10个字符, 以空格补齐10
- number(总长度,小数位数): 表示的数字类型
- date : 年月日时分秒
- timestamp : 时间戳 表示的时间更加精确可信
- LONG : 大文本的类型 最大可存2G
- CLOB : Character Large Object 字符大对象, 最大可存4G
- BLOB : Binary Large Object 二进制大对象 , 最大可存4G
- 用户头像 ---> 100kb
- varchar2(总长度) : 表示的可变长度字符串,但是不能超过最大长度
③示例:
create table person(
pid number,
pname vachar2(20),
age number,
sal number(10,2)
);
④使用子查询创建表
--使用子查询创建表
--相当于是复制表,结构和表中的数据
create table emp as select * from scott.emp;--只复制表结构
create table emp1 as select * from scott.emp where 1=2;
4、修改表
①添加语法:
alter table 表名称 add(列名1 类型 [default 默认值],列名2 类型 [default 默认值]....)
②修改语法:
alter table 表名称 modify(列名1 类型 [default 默认值],列名2 类型 [default 默认值]....)
③修改列名:
alter table 表名称 rename column 列名1 to 列名2;
④示例:
-- 添加列
alter table person add sex VARCHAR2(10);
-- 同时添加多列
ALTER TABLE person ADD(
mobile VARCHAR2(10),
adddress VARCHAR2(100)
);
-- 重定义列
alter table person modify mobile number;
-- 修改列名
alter table person rename column sex to gerder;
-- 删除列
delete table person drop column address;
-- 修改表名
rename person to p;
⑤添加与删除外键约束语法
-- 添加外键语法
alter table t_student1 add constraint 外键名 foreign key(作为外键的列名) references t_class1(主键的列名);
-- Oracle 语法
alter table t_student1 drop constraint 外键名;
5、删除表
-- 删除表
drop table p;
6、约束
①表的五大约束:
- 主键约束: primary key 非空并且唯一
- 唯一约束: unique 唯一可以为空
- 非空约束: not null 不能为空
- 检查约束: check(条件), mysql支持这个语法,但是没有效果
- 外键约束: 约束从表中记录必须是参考主表中的记录
- 强制删除表
- 级联删除
②示例:
create table person(
pid number primary key,
pname varchar2(20) unique,
age number not null,
gender varchar2(10) check(gender in('男','女'))
);
-- 报 ORA-02290: check constraint (ZHANSAN.SYS_C005421) violated 错
insert into person values(1,'zs',18,'妖');
/*
外键约束: 约束从表中记录必须是参考主表中的记录
商品表 -----> 分类表ID
*/
-- 分类表
create table category(
cid number primary key,
cname varchar2(20)
);
-- 商品表
create table product(
pid number primary key,
pname varchar2(20),
cno number
);
-- 添加外键约束
alter table product add foreign key(cno) references category(cid);
insert into category values(1,'手机数码');
insert into product values(1,'锤子手机',1); -- 强制删除category表(不建议使用)
-- 先解除外键约束,然后再删除自己
drop table category cascade constraint; -- 级联删除
alter table product add foreign key(cno) references category(cid) on delete cascade; insert into category values(1,'手机数码');
insert into category values(2,'鞋靴箱包');
insert into product values(1,'锤子手机',1);
insert into product values(2,'耐克跑鞋',2); -- 级联删除:删除category 中的1号记录,级联删除
-- 删除主表中记录的时候,会先去删除从表中对应的记录,然后再删除主表中记录
delete from category where cid = 1;
(二)DML(详细请参考MySQL基本操作篇)
1、插入记录
-- 使用子查询插入记录
insert into emp select * from scott.emp where deptno=10;
2、更新记录
语法:
update 表名 set 列名 = 列的值 [where 条件]
3、删除记录
delete和truncate的区别:
delete | truncate |
逐条删除数据 | 先删除表然后再创建表 |
DML | DDL |
支持事务 | 不支持事务 |
删除数据可以回滚 | 不能回滚 |
删除所有记录,执行效率高 |
4、事务
①事务的概念:一组SQL操作,要么都成功,要么都失败。
②事务的特型:ACID
- 原子性: 事务是最小不可分割的单元
- 一致性: 事务执行前后,数据的状态要保持一致
- 隔离性: 一个事务在执行的时候,不受其它事务影响
- 持久性: 事务一旦提交,数据就持久的保存到磁盘上
③若不考虑事务的隔离级别,会出现什么问题: 脏读, 不可重复读, 虚读/幻读
- 脏读 : 一个事务读取到了另一个事务未提交的数据
- 不可重复读: 一个事务多次读取,前后数据不一致(update)
- 虚读/幻读: 一个事务多次读取,前后数据不一致(insert)
④隔离级别:
mysql:
- READ UNCOMMITTED 读取未提交 问题: 脏读, 不可重复读, 虚读
- READ COMMITTED 读取已提交 问题:不可重复读, 虚读
- REPEATABLE READ 可重复读 问题: 虚读
- SERIALIZABLE 串行化,一个事务在执行的时候,其它事务处于等待状态 没有问题
Oracle:
- READ COMMITTED (默认)
- SERIALIZABLE
- READ ONLY
⑤事务的保存点: savepoint 保存点的名称
事务回滚到保存点: rollback to 保存点
应用场景——数据迁移: 1000万条 1--50万设置保存点--100万 事务
示例:
create table louceng(
lou number primary key
); BEGIN
-- 业务层
INSERT INTO louceng VALUES(1) ;
INSERT INTO louceng VALUES(2) ;
INSERT INTO louceng VALUES(3) ;
SAVEPOINT sanlou ;
INSERT INTO louceng VALUES(4) ;
INSERT INTO louceng VALUES(4) ;
INSERT INTO louceng VALUES(5) ;
COMMIT ;
EXCEPTION
-- 处理异常
WHEN others THEN
ROLLBACK TO sanlou ;
COMMIT;
END ; select * from louceng;
Oracle数据库基本操作(一) —— Oracle数据库体系结构介绍、DDL、DCL、DML的更多相关文章
- mysql数据库基本操作以及获取数据库强大帮助文档
MySQL数据库强大帮助文档 mysql 中help等价于\h或者? mysql> ? create database;(查看创建数据库的语法) mysql> ? drop databas ...
- 黑马oracle_day01:02.oracle的基本操作
01.oracle体系结构 02.oracle的基本操作 03.oracle的查询 04.oracle对象 05.oracle编程 02.oracle的基本操作 PLSQL中文乱码问题解决1.查看服务 ...
- SQLSever数据库基本操作
一.SQLSever数据库基本操作 1.创建数据库 use master if exists(select * from sysdatabases where name='SMDB') drop da ...
- [转]Oracle数据库ASH和AWR的简单介绍
在Oracle数据库中,有时我们可能会遇到这样的术语:ASH和AWR,那么它们是怎样产生的呢?它们的作用又是什么呢?本文我们就来介绍这一部分内容. 1.10g之前 用户的连接将产生会话,当 ...
- Oracle 数据库基本操作——实用手册、表操作、事务操作、序列
目录: 0. 参考链接与参考手册1. oracle 实用(常用操作)指令2. 数据库基本操作语法 a) 表操作 1)创建表 2)更新表 3)删除表 4)查询 b) 事务操作 c) 序列操作 1)创建序 ...
- C#学习--Oracle数据库基本操作(连接、增、删、改、查)封装
写在前面: SQLserver的C#封装:https://www.cnblogs.com/mexihq/p/11636785.html 类似于上篇有关SQLserver的C#封装,小编对Oracle数 ...
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...
- Oracle数据库名、实例名、数据库域名、全局数据库名、服务名之间的区别
数据库名.实例名.数据库域名.全局数据库名.服务名 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数据库 ...
- oracle之二实例与数据库
实例与数据库 1.Oracle 网络架构及应用环境 看PPT,Oracle结构的基本单元.术语 2.Oracle 体系结构 1)oracle server :database + instanc ...
随机推荐
- Vim 中的持久撤消
Vim中的持久撤消 阅读文本大约需要俩分钟. 在 Vim 中像其他文本编辑器一样,你可以在当前会话中执行 "撤销/重做" .当一旦会话关闭,则你需要重新打开一个新文章,运行撤销将不 ...
- Spring 事务相关点整理
Spring和事务的关系 关系型数据库.某些消息队列等产品或中间件称为事务性资源,因为它们本身支持事务,也能够处理事务. Spring很显然不是事务性资源,但是它可以管理事务性资源,所以Spring和 ...
- Zynq-7000 FreeRTOS(二)中断:Timer中断
总结Zynq-7000 这款器件中的Timer定时器中断,为FreeRTOS中断做准备.在 ZYNQ 的纯 PS 里实现私有定时器中断. 每隔一秒中断一次, 在中断函数里计数加 1, 通过串口打印输出 ...
- Sweep Line
391. Number of Airplanes in the Sky https://www.lintcode.com/problem/number-of-airplanes-in-the-sky/ ...
- html转图片,java库cssbox
引入依赖包 <dependency> <groupId>net.sf.cssbox</groupId> <artifactId>cssbox</a ...
- [问题解决]Fresco设置占位图不显示的问题
[问题解决]Fresco设置占位图不显示的问题 /** * Created by diql on 2017/02/15. */ 问题说明 本来设置占位图是通过以下方法: public void set ...
- Linux下Tomcat8.0.44配置使用Apr
听说Apr可以提高tomcat很多的性能,配置具体如下 1.安装apr 1.5.2 [root@ecs-3c46 ]# cd /usr/local/src [root@ecs-3c46 src]# w ...
- Linux常用命令之sed(2)
Sed SED的英文全称是 Stream EDitor,它是一个简单而强大的文本解析转换工具,在1973-1974年期间由贝尔实验室的Lee E. McMahon开发,今天,它已经运行在所有的主流操作 ...
- linux 安装jdk 二进制版本,非安装版
0.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择对 ...
- Eclipse空白包的显示和隐藏
Eclipse空白包的显示和隐藏 点击三角形, ,下拉 -> Customize View... -> Empty packages (勾选)