• Oracle——数据处理(增删改查),创建表与管理表,视图,索引,同义词


    SQL的类型

    • 1、DML(Data Manipulation Language 数据操作语言): select insert update delete
    • 2、DDL(Data Definition Language 数据定义语言): create table,alter table,truncate table,drop table,create/drop view,sequnece,index,synonym(同义词)
    • 3、DCL(Data Control Language 数据控制语言): grant(授权) revoke(撤销权限)

    DML

    插入数据

    insert into emp(empno,ename,sal,deptno) values(1001,'Tom',3000,10);
    
    -- 或 采用地址符 &
    
    insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);
    输入 empno 的值:  1002
    输入 ename 的值:  'Mary'
    输入 sal 的值:  2000
    输入 deptno 的值:  20
    原值    1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
    新值    1: insert into emp(empno,ename,sal,deptno) values(1002,'Mary',2000,20)
    
    -- 批量添加数据
    
    --一次性将emp中,所有10号部门的员工插入到emp10中
    insert into emp10 select * from emp where deptno=10;

    海量插入数据

    1、数据泵(PLSQL程序)

      dbms_datapump(程序包)

    2、SQL*Loader

    3、外部表

    delete和truncate的区别

    1、delete逐条删除;truncate先摧毁表 再重建

    2、delete是DML truncate是DDL

            (可以回滚) (不可以回滚)

    执行DDL类型的命令会提交事务

    3、delete不会释放空间 truncate会

    4、delete会产生碎片 truncate不会

    • 碎片:在Oracle中有一个指针(高水位线)记录着下次insert的位置,如果我们在数据的中间执行delete命令就会产生碎边(数据不连续)

    5、delete可以闪回(flashback) truncate不可以

    • 闪回:还原数据

    6、delete操作比truncate操作快(原因:可以还原数据)

    Oracle中的事务

    1、起始标志: 事务中的第一条DML语句

    2、结束标志:提交: 显式 commit 隐式: 正常退出 DDL DCL

            回滚: 显式 rollback 隐式: 非正常退出 掉电 宕机

    创建和管理表(DDL)

    1、创建表

    CREATE TABLE test1 (
        tid NUMBER,
        tname VARCHAR2 ( 20 )
    );
    
    -- 或直接copy别的表结构
    
    CREATE TABLE emp20 AS SELECT
    * 
    FROM
    	EMP 
    WHERE
    	DEPTNO = 20;-- where条件有效,复制数据,无效,只复制表结构
    

    2、查看表结构

    desc test1  -- SQLplus

    3、增加新列

    ALTER TABLE test1 ADD photo blob;   -- blob:二进制大对象,是一个可以存储二进制文件的容器

    4、修改列

    ALTER TABLE test1 MODIFY tname VARCHAR2 ( 40 );  -- 修改tname列的varchar长度为40

    5、删除列

    ALTER TABLE test1 DROP COLUMN photo;  -- 删除photo字段

    6、重命名列

    ALTER TABLE test1 RENAME COLUMN tname TO username;  -- 修改列名tname为username

    7、重命名表

    RENAME test1 TO test2;

    8、删除表

    DROP TABLE test2;  -- 表并没有完全被删除,只是别放进了回收站中

    回收站

    注意:管理员没有回收站

    可以使用select查询出(回收站中)表中的内容

    查看回收站

     show recyclebin;

    清空回收站

     purge recyclebin;

    闪回删除

    flashback table test2 to before drop;

    9、约束(数据完整性由各种约束保证)

    1)检查约束

    create table test3(
    	tid number,
    	tname varchar2(20),
    	gender varchar2(2) check (gender in ('男','女')),	-- 检查约束
    	sal  number check (sal > 0)
    );
    
    SQL> insert into test3 values(1,'Tom','男',2000);
    
    已创建 1 行。
    
    SQL> insert into test3 values(2,'Mike','*啊*',2000);
    insert into test3 values(2,'Mike','啊',2000)
    *
    第 1 行出现错误: 
    ORA-02290: 违反检查约束条件 (SCOTT.SYS_C005393) 
    

    2)各种约束

    CREATE TABLE student (
    	sid NUMBER constraint student_pk primary key,	-- 主键约束,constraint字段表示使用约束
    	sname VARCHAR2 ( 20 ) constraint student_name_notnull NOT NULL,		-- 非空约束
    	gender VARCHAR2 ( 2 ) constraint student_gender CHECK (gender IN ( '男', '女' )),	-- 检查约束
    	email VARCHAR2 ( 40 ) constraint student_email_unique UNIQUE 	-- 唯一约束
                            constraint student_email_notnull NOT NULL,	-- 一个字段设置两个约束
    	deptno NUMBER constraint student_fk references dept ( deptno ) ON DELETE SET NULL 	-- 外键约束,设置级联置空
    );
    

    视图

    视图就是封装了一条复杂查询的语句。视图是一个虚表,它最大的优点就是简化复杂查询,所以不建议对视图进行其他的操作。

    普通用户默认是不能创建视图的,需要管理员进行授权

    数据库在解释查询语句的时候会查找视图的定义,视图中不存放数据(除了物化视图,物化视图是快照,真正的存放数据,需要刷新)。视图每次查询的时候都要进行数据的查找

    管理员登录

    > sqlplus sys/123 as sysdba  -- 用户名和密码可以随便写

    SQL> show user

    USER 为 “SYS”

    为scott用户授权创建视图

    grant create view to scott;

    创建视图

    CREATE 【OR REPLACE】 VIEW empinfoview AS SELECT  -- CREATE OR REPLACE表示存在替换,不存在创建
    	e.empno,
    	e.ename,
    	e.sal,
    	e.sal * 12 annsal,
    	d.dname 
    FROM
    	emp e,
    	dept d 
    WHERE
    	e.deptno = d.deptno;

    查看视图

    SELECT
    	* 
    FROM
    	empinfoview;

    序列

    在很多数据库中都存在一个自动增长的列,如果现在要想在Oracle中完成自动增长的功能,则只能依靠序列完成所有的自动增长操作,需要用户手工完成处理。

    Oracle将序列装入内存可以提高访问效率

    序列创建语法

    创建一个简单的序列

    create sequence myseq;

     

    索引

    索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o次数,从而提高数据访问性能。

    例如:

    SELECT * FROM emp WHERE sal>1500;

    此时由于在sal上没有设置索引,所以它的查询过程是采用逐行判断的方式完成的,这种操作随着数据量的上升,则性能会出现越来越多的问题。于是引入索引:

    索引中保存的是rowid行地址

    行地址

    SQLplus命令

    通过rowid查询数据

    1、单列索引

    单列索引是基于单个列建立的索引:

    CREATE index 索引名 on 表名(列名)  -- 示例:create index myindex on emp(deptno)

    2、复合索引

    复合索引是基于多个列的索引。在同一张表上可以有多个索引,但是要求列的组合必须不同

     

    同义词(表的别名)

    语法:

    查看其它用户的表

    1)为scott用户授权访问hr下的employees表

    create synonym hremp for hr.employees;

    2)为scott用户授权添加同义词

    create synonym hremp for hr.employees;

    3)使用scott用户创建hr.employees表的别名

    CREATE SYNONYM hremp FOR hr.employees;  -- 私有的,只有当前用户可以使用;在create后加上public表示公有的,所有用户都可以使用

    4)查询

    5)删除同义词

    DROP SYNONYM hremp;

  • 相关阅读:
    cocospods 卡在 Analyzing dependencies
    android px、sp、dp之间的互转
    Android 4.4环境搭建——Android SDK下载与安装
    我心中的核心组件(可插拔的AOP)~大话开篇及目录
    EF架构~AutoMapper对象映射工具简化了实体赋值的过程
    我心中的核心组件(可插拔的AOP)~第二回 缓存拦截器
    EF架构~为EF DbContext生成的实体添加注释(T5模板应用)
    品味编程~底层开发人员应该这样设计一个字体类
    Study notes for Clustering and K-means
    深入理解Oracle索引(25):一招鲜、吃遍天之单字段索引创建思路
  • 原文地址:https://www.cnblogs.com/x54256/p/9002043.html
Copyright © 2020-2023  润新知