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;

  ③删除用户及用户下的数据

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

  ③示例:

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;

  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;

原文地址:https://www.cnblogs.com/gdwkong/p/8502710.html

时间: 2024-10-11 00:51:18

Oracle数据库基本操作 —— Oracle数据库体系结构介绍、DDL、DCL、DML的相关文章

什么是DDL,DCL,DML

1.DCL 数据库控制语言,全称是Data Control Language 关键字类型:grant.remove 2.DDL 数据库定义语言,全称是Data Definition Language 关键字类型:Creat 3.DML 数据库操作语言,全称是Data Manipulation Language 关键字类型:Insert.Delete.Update 4.DQL 数据库查询语言,全称是Data Query Language 关键字类型:Select

1Python全栈之路系列之MySQL数据库基本操作

Python全栈之路系列之MySQL数据库基本操作 MySQL数据库介绍 MySQL是一种快速易用的关系型数据库管理系统(RDBMS),很多企业都在使用它来构建自己的数据库. MySQL由一家瑞典公司MySQL AB开发.运营并予以支持.它之所以非常流行,原因在于具备以下这些优点: 基于开源许可发布,无需付费即可使用. 自身的功能非常强大,足以匹敌绝大多数功能强大但却价格昂贵的数据库软件. 使用业内所熟悉的标准SQL数据库语言. 可运行于多个操作系统,支持多种语言,包括 PHP.PERL.C.C

Oracle实例和Oracle数据库(Oracle体系结构)

--========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --========================================== /* 对于初接触Oracle 数据库的人来讲,很容易混淆的两个概念即是Oracle 实例和Oracle 数据库.这两 概念不同于SQL sever下的实例与数据库,当然也有些相似之处.只是在SQL server我们根本不需要花费太 多的精力去搞清SQL实

Oracle实例和Oracle数据库(Oracle体系结构)---转载

对于初接触Oracle 数据库的人来讲,很容易混淆的两个概念即是Oracle 实例和Oracle 数据库.这两 概念不同于SQL sever下的实例与数据库,当然也有些相似之处.只是在SQL server我们根本不需要花费太 多的精力去搞清SQL实例和数据库,因为它简单易于理解.下面简要说明一下SQL实例.数据库,更多的是讲 述Oracle下的实例及数据库. 一.SQL server中的实例与数据库 1.SQL中的实例指的是一个SQL server服务器上仅有一个缺省实例.缺省实例名即为机器名S

【转载】Oracle实例和Oracle数据库(Oracle体系结构)

免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:Leshami      原文地址:http://blog.csdn.net/leshami/article/details/5529239 --========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --======================================

Oracle专题1之Oracle概述、Oracle数据库的体系结构以及常用命令

1.Oracle概述 -  Oracle Database,简称为Oracle.是美国ORACLE(甲骨文)公司的一款对象关系型的数据库管理系统(ORDBMS).目前在数据库市场上占有主要份额. -  Oracle的发展史:1977年埃里森和两个朋友,成立RSI公司:1979年的夏季,RSI发布了Oracle第二版:1983年,发布Oracle第三版,并在1983年改名为Oracle公司(含义是"一切智慧的源泉"):1986年,成为世界第四大软件公司:1992年6月,Oracle发布第

2.1.Oracle实例和Oracle数据库(Oracle体系结构)

转载自:http://blog.csdn.net/robinson_0612/article/details/5529239 一个Oracle Server由一个Oracle实例和一个Oracle数据库组成.即:Oracle Server = Oracle Instance + Oracle Database 一.Oracle 实例 Oracle实例 包括了内存结构(SGA)和一系列后台进程(Background Process),两者合起来称为一个Oracle实例 即:Oracle Insta

Oracle的基本操作-dml,ddl,dcl

二.SQL语言 SQL  structure query language  结构化查询语言 SQL语句 : DDL语句 DML语句 .DCL语句 DDL--data define language --create.alter.drop           --数据定义语言 DML--data management language --insert.update.delete         --数据操作语言 DCL--data control language  --grant.revok

oracle系列(四)oracle事务和常用数据库对象

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 前言:本次内容的相关知识点我们在学习sqlserver2008R2的时候介绍过一些,包括:事务.索引.视图等.那么今天我们学习在oracle上实现这些重要的内容,以实现数据库的优化. 一.事务 1.简介 事务是数据处理的核心,是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败.DBMS通过事务的管理来协调用