数据库之ORACLE常见基础操作

一》分组查询与分组筛选

分组查询关键字:group by 分组字段名1,分组字段名2,..

1.使用分组后,在select语句中只允许出现分组字段和多行函数。

2.多字段分组,则按by后次序依次分组。

3.在where子句中不允许出现多行函数。

分组筛选关键字:having

1.针对分组进行分组后的数据筛选,允许使用多行函数。

2.having关键字必须和分组结合使用,不允许单独使用。

where与having

1.分组语句中使用where进行字段级别的筛选,使用having进行多行函数的筛选。

2.where字句不允许出现多行函数,having允许出现多行函数。

3.where和having都可以使用普通字段进行直接筛选,但where效率高于having。

where执行顺序:from->where->group by->select->order by

having执行顺序:from->group by->select->having->order by

二》 增删查改及数据备份

注:增删改操作后,不会立即进行数据写入,还需手动对数据进行提交,若数据有问题可回滚。主键非空唯一,用于唯一标识一条数据。

  • 增:insert int 表名(字段名,字段名,...)values(值1,值2,...);

    注:值和字段数量和顺序必须一一对应,如果全字段插入,可省略字段名部分。

  • 删:delete from 表名 ---删除表中所有记录

​ delete from 表名 where 条件 ---删除符合条件的指定数据

​ truncate table 表名 ---删除表中所有记录,效率高于delete

  • 改:update 表名 set 字段名=新值,字段名=新值...

    ​ update 表名 set 字段名=新值,字段名=新值... where 条件

  • 备份:只会备份表结构和表数据,不会备份约束

    --表全部备份:create table 新表名 as select * from 备份表名

    --表部分备份:create table 新表名 as select 字段名1,字段名2,...from 备份表名

    --数据整体插入:insert into 插入表名 select * from 表名

    注:插入字段数量,类型都要和查询结果字段一致

三》二维表维护

  • 添加新字段:alter table 表名 add 字段名 类型
  • 修改表名:rename 原表名 to 新表名
  • 修改字段类型:alter table 表名 modify 字段名 新类型
  • 修改字段名:alter table 表名 rename column 字段名 to 新字段名
  • 删除字段:alter table 表名 drop column 字段名
  • 删除表:drop table 表名

四》约束

  • 主键:primary key
  • 非空约束:not null
  • 检查约束:check(条件)
  • 唯一约束:unique

使用:

  • 直接在创建表的字段后使用 约束关键字
  • 在创建表的语句最后使用

    例:constraints pk_表名_字段名 primary key(字段名);

    ​ constraints ck_表名_字段名 check(字段名 is not null);

    ​ constraints un_表名_字段名 unique(字段名);

  • 在创建表后使用 alter table 表名 add constraints pk_表名_字段名 primary key(字段名);
  • 删除约束 alter table 表名 drop constraints 约束名;

外键:当一张表的某个字段的值需要依赖另外一张表的某个字段的值,则使用外键约束,主动依赖的表称为子表,被依赖的表称为父表。在子表插入的数据在父表不存在,则会自动报错。

使用:

  • 在子表字段后直接使用 references 父表名(字段)
  • 在创建表的语句的最后使用 constraints fk_子表名_字段名 foreign key(字段名) references 父表名(字段名)
  • 在创建表后使用 alter table 表名 add constraints fk_子表名_字段名 foreign key references 父表名(字段名)
  • 删除外键 alter table 表名 drop constraints 外键约束名

缺点:无法直接删除父表数据,除非级联删除

级联删除:在添加外键约束时,使用关键字 on delete cascade

​ 使用:当删除父表数据时,自动删除子表相关所有数据

​ 缺点: 无法保留子表历史数据

​ 使用关键字on delete set null,删除父表数据时,将子表中依赖 字段设置为null(子表依赖字段不能添加非空约束)

五》序列

create sequence 序列名

  • 默认开始是没有值的,也就是指针指在了没有值的位置
  • 序列名.nextval每次执行都会自增一次,默认步长为1(increment by 可改变步长)
  • 序列名.currval查看当前序列的值,开始是没有的
  • 作为主键使用时,动态获取之间值,新增数据时极大的避免了主键冲突(序列名.nextval作为主键)

六》视图

创建视图:create view 视图名 as select 对外提供的内容 from 真实表名

删除视图:drop view 视图名

特点:

  • 保护真实表,隐藏重要字段数据,保护数据
  • 在视图中的操作会映射执行到真实表中
  • 可以手动开启只读模式,使用关键字 with read only

你是我出现在这唯一的原因,无所谓因果,也无关风月.

16 声望
0 粉丝
0 条评论
推荐阅读
万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...

JavaGuide8阅读 1.8k

封面图
花了几个月时间把 MySQL 重新巩固了一遍,梳理了一篇几万字 “超硬核” 的保姆式学习教程!(持续更新中~)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

民工哥11阅读 1.2k

封面图
一次偶然机会发现的MySQL“负优化”
今天要讲的这件事和上述的两个sql有关,是数年前遇到的一个关于MySQL查询性能的问题。主要是最近刷到了一些关于MySQL查询性能的文章,大部分文章中讲到的都只是一些常见的索引失效场合,于是我回想起了当初被那个...

骑牛上青山8阅读 2.3k评论 2

程序员英语学习指南
动机为什么程序员要学习英语?工作:我们每天接触的代码都是英文的、包括很多技术文档也是英文的学习:最新最前沿的技术最开始都是只有English版本就业:学好英语让你的就业范围扩大到全球,而不只限于国内目标读...

九旬7阅读 699

初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。

王中阳Go4阅读 894评论 2

封面图
又一款内存数据库横空出世,比 Redis 更强,性能直接飙升一倍!杀疯了
KeyDB是Redis的高性能分支,专注于多线程,内存效率和高吞吐量。除了多线程之外,KeyDB还具有仅在Redis Enterprise中可用的功能,例如Active Replication,FLASH存储支持以及一些根本不可用的功能,例如直接备份...

民工哥4阅读 949评论 1

封面图
2023最新MySQL高频面试题汇总
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~

程序员大彬4阅读 1k

你是我出现在这唯一的原因,无所谓因果,也无关风月.

16 声望
0 粉丝
宣传栏