【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131054454
出自【进步*于辰的博客

纯文字阐述,内容比较干。并且,由于考虑到时间长了恐有所遗漏,便即兴记录,并没有对内容进行筛选、排序。因此,大家在阅读时可以直接Ctrl + F进行检索。

1、细节积累

  1. 字符串前有一个' '(空字符),故首字母的索引是1
  2. 使用in/not in时,逐条检索。任何类型与null比较,都返回null,故子查询时,要先清除所有null记录,否则结果集都为空;
  3. 使用group by时,select中出现的字段必须在group by中存在;
  4. 查看所有实例:show parameter name;(注:当前用户必须至少拥有sysdba权限)
  5. 插入时,若要插入特殊字符'&',不能直接放入字符串中,因为&是变量修饰符,只能通过字符串拼接实现;
  6. 插入时,未赋值却有值,此值来自default,使用alter table 表名 set 字段 = default可将所有已存储数据重置为default
  7. 数据表存储于用户的数据群中,会占据存储空间。delete是 DML,删除记录后并不释放空间,可回滚;truncate是 DDL,执行后释放空间,不可回滚。
  8. 表约束和列约束相同,只是定义位置不同。列约束定义于列后,表约束定义于所有列后。定义格式:constraint 约束名 约束类型(字段)。(出自create table...
  9. 日期运算: (1)+ 1:增加一天;(2)+ 1/24:增加一小时,都会进位。
  10. 查询对象结构:desc 对象名。 (“对象”如:数据表)
  11. 查看Oracle版本方法:(1)登录时(cmd)显示;(2)sqlplus -v;(3)select * from v$version
  12. 修改表名命令:(1)alter table old_name rename to new_name;(2)rename old_name to new_name
  13. 查看所有实例:show parameter name

2、关于修改数据表字段时的规定

参考笔记一,P21.15。

  1. 若修改数据类型,则此列中已存储数据必须全为null(不是字符串'null',而是指“空”,无数据)。
  2. 若此类的数据类型为数值类型,(1)减少长度,同上;(2)增大长度,无限制。
  3. 若此类的数据类型为字符类型,减少长度时,只要修改后的长度足够容纳已存储数据,无限制;
  4. 修改默认值:modify(字段 default 值)。只会改变新增值,不会影响已存储值。
  5. 修改别名:alter table 表名 rename column 旧名 to 新名

3、登录相关

参考笔记二,P24.5/6、P58.1。

3.1 免密登录

Oracle登录命令的形式很多,普遍的两种形式是:

  1. sqlplus /nolog,一般的用途是防止用户名和密码被窥视;
  2. sqlplus / as sysdba。(登录用户为sys,身份是sysdba

为什么可以“免密登录”?

\color{grey}{为什么可以“免密登录”?}

为什么可以“免密登录”?
首先,Oracle具有三种身份认证方式:操作系统身份认证、密码文件认证、数据库认证。之所以能“免密登录”,是因为操作系统的当前账户在用户组ora_dba中。(大家可以在“组策略”中看到这个用户组)

3.2 登录

远程登录命令格式:

sqlplus 用户名/密码@ip地址:端口/实例名

例如:

sqlplus scott/123456@localhost:1521/bpmtest

默认端口是1521

其他命令:

show user	// 查看当前用户

// 切换用户
1、conn scott/123456
2、connect /
3、conn / as sysdba shutdown immediate // 关闭数据库
startup // 打开数据库

4、数据字典dba_profiles

参考笔记二,P24.4。

此字典记录了口令和资源限制的配置信息,如:登录允许密码错误次数、密码过期时间。如下:(当前用户身份至少是sysdba才能访问,当前用户为基础数据库管理员sys

修改此表数据不能使用update,而是需要在命令行完成。

示例。

alter profile default limit failed_login_attempts 3;

将登录允许密码错误次数设置为3次。

5、集合运算

参考笔记一,P20.10;笔记二,P58.3。

5.1 概述

常见的集合运算有4种:

  1. union:联合。相当于“并集”,去重,按照第一列升序排序;若每个查询都有 null(空记录),只保留一个。
  2. union all:完全联合。不去重,默认不排序,并保留所有 null。由于不去重,故效率高于union
  3. intersect:交集。
  4. minus:差集。假设运算是A minus B(A、B是select查询),等价于A - A intersect B

集合运算条件:

  1. 所有select查询(在后称为“子查询”)的列数必须相同并类型一一对应,列名无需相同;
  2. 不允许“子查询”使用order by,只能联合后使用(即只能在最后使用);
  3. 以第一个“子查询”的列作为运算结果的列;
  4. 去重依据:在“子查询”内、“子查询”间,根据不同记录之间所有列的数据是否相同判断(一一对应比较),不考虑列名(包括相同列名)。

5.2 示例

示例数据。


运算示例。



6、关于 null

参考笔记一,P26.30/31;P27.30。

注:null 指空,即“无数据”,不是'null''NULL'

6.1 规则

  1. 任何类型与 null 运算都为空。
  2. 包含空值的连接字符串||,同与空字符串''连接。

6.2 null 对in/not in的影响

innot in我们都很熟悉,不知道大家有没有注意一个细节,就是明明存在满足in/not in的记录,可结果集为空。为何如此?

我先将所有情况列举出来,再说明原因。为了降低大家的阅读成本,在此规定格式:

where A B C

A 是字段,B 是in/not in,C 是条件列表。

八种情况:

  1. A 中有 null,B 是in,C 有null。结果:正常匹配,但 null 行无法显示。(正常匹配非 null 记录)
  2. A 中有 null,B 是in,C 无null。结果:正常匹配。
  3. A 中有 null,B 是not in,C 有null。结果:无记录。
  4. A 中有 null,B 是not in,C 无null。结果:正常匹配非 null 记录。
  5. A 中无 null,B 是in,C 有null。结果:正常匹配。
  6. A 中无 null,B 是in,C 无null。结果:正常匹配。
  7. A 中无 null,B 是not in,C 有null。结果:无记录。
  8. A 中无 null,B 是not in,C 无null。结果:正常匹配。

原因:

  1. in相当于=not in相当于!=
  2. 表示为空的格式是is null,不为空是is not null
  3. 满足in的条件是“只要有一个匹配”,满足not in的条件是“必须所有都不匹配”。
  4. 无论in还是not null,都是逐一进行比较。

大家基于这四点,套用到以上八种情况,就知道为何“无记录”了,在此不赘述。

P

S

PS:

PS:当然,大家在使用in/not in时,可以直接对比这八种情况,作相应的数据处理即可,不需要具体分析。

8、关于类型间转换

参考笔记一,P17。

8.1 隐式转换

  1. 插入、更新时,转换为字段的类型,如:Integer → number
  2. 查询时,转换为属性的类型,如:number → int
  3. 字符与数字比较时,转换为数值类型;
  4. 字符与日期比较时,转换为日期类型;
  5. ||连接时,转换为字符类型。

8.2 显式转换

如下图:

图解:

  • Ato_char(d, 格式码)

格式码:
yyyy→ 年,year→ 年份英文全称,month→ 月份,MM/mm→ 月,day/dy→ 星期,dd→ 日,hh24/HH24→ 小时,mi→ 分钟,ss→ 秒,am/pm→ 朝夕。

示例:

  • Bto_number(c)

规定: c必须是数字型字符串才可以转换。

示例:

  • Cto_char(n, 格式码)

格式码:
9(数字)→ 保持数字原状;0(数字)→ 若n的位数小于格式码的位数时,用0代替;$→ 美元;L(字母)→ 本地货币;.(小数点)→ 保持本身。

示例:
1、格式码:'9999.99'

2、格式码:'0000.00'

3、格式码:'$9999.99''$0000.00'

4、格式码:'L9999.99'

特例:
若格式码的长度大于数字的长度,则显示##...

示例:

  • Dto_date(c, 格式码)

同样遵循转换A中的格式码。(后续补充)

9、用户相关

9.1 用户

参考笔记一,P24.19;笔记二,P24.3。

用户创建步骤:

// 创建用户
create user 用户名 identified by 密码; // 修改用户配额
alter user 用户名 quota 空间大小 on 表空间名
// 或:
grant unlimited tablespace to 用户名; // 无限表空间 // 授权
grant 权限 to 用户 [with admin option];
// []内语句的作用是:允许此用户将此权限授予其他用户 // 回收权限
revoke 权限 from 用户;
// 若此用户已将此权限授予其他用户,则回收权限时不会连带回收

其他命令:

alter user 用户 identified by 密码;		// 修改密码

alter user 用户名 account lock/unlock;		--上锁 / 解锁--
// 用户状态:open(打开。默认)、expired(密码过期)、locked(已锁定)

9.2 对象权限

参考笔记一,P24.20、P25.23~25。

分类:
selectdeleteinsertupdatealter(修改)、references(外链)、index(索引)、execute(执行)。

命令:

// 授权
grant 权限[(字段)]|all privileges[(字段)]
on [schema.]Object
to 用户|public [with grant option] // 回收权限
revoke 权限 on [schema.]Object from 用户;

说明:

  1. 权限即上述分类;all privileges指所有对象权限;schema是用户名;Object是对象,指数据表;public指所有用户;with grant option类似with admin option
  2. 关于public对象:既不是用户,也不是角色,为所有用户自动共有public拥有的所有权限,所有用户都会自动拥有,如:grant create user to public,表示所有用户都有权创建用户;
  3. 若用户有创建对象(如:数据表),则删除用户(drop user 用户)时需加上cascade,表示“先删除此用户旗下对象,再删除用户”;

9.3 角色

参考笔记一,P24.21。

角色创建步骤:

create role 角色名;		// 创建角色
grant 权限 to 角色; // 授权
grant 角色 to 用户; // 为用户分配角色
revoke 角色 from 用户; // 收回用户角色
revoke 权限 from 角色; // 收回权限
drop role 角色; // 删除角色

9.4 数据字典

参考笔记一,P23.17、P25.26;笔记二,P58.2。

user_objects	--当前用户旗下所有对象--
user_users --查询当前用户--
dba_users/all_users --查询所有用户--
dba_sys_privs/user_sys_privs --查询用户所有系统权限--
dba_tab_privs/all_tab_privs/user_tab_privs --查询用户所有对象权限--
dba_role_privs/user_role_privs --查询用户所有角色-- dba_roles --查询所有角色--
role_sys_privs --查询角色所有系统权限--

最后

如果大家想要了解一些Oracle知识点,可查阅博文《Oracle知识点锦集》。

本文持续更新中。。。

[Oracle]细节、经验的更多相关文章

  1. 给同为.NET开发者普及一点Oracle数据库经验

    前段时间,因为要给自己开发的搜易站内搜索引擎增加Oracle数据库的支持,所以学习了下Oracle的基础知识,发现使用方式跟MYSQL,MSSQL等数据库的思维有很大的不同,总结一下几点不同,希望给初 ...

  2. oracle细节

    1.oracle中NVL的含义: 如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值. 2.Oracle中in和exists的区别: 1).sel ...

  3. oracle工作经验(左右连接、decode)

    oracle左右连接:select a.studentno, a.studentname, b.classname from students a, classes b where a.classid ...

  4. 一旦配置oracle em经验

    对oracle10grac构造em,原本很easy事儿,但它需要一个很长的时间,记录下来.MEMO. 首先,例如,报告了以下错误: [oracle@node1 admin]$ emca -config ...

  5. 一些oracle的经验

    注:再写存储过程的时候,在for循环里要写begin和end,这样就可以写exception ,让这条错误数据回滚,然后记录错误日志,commit 关键字: oracle 存储过程 1.基本结构 CR ...

  6. 之前的一些Oracle的经验总结

    1. 安装: 1) 关于字符集的选择,现在还不很了解,修改是需要进入一个模式下才可以修改,当然新建一个数据库实例的时候可以重新设定: UTF8是相对比较大的一个字符集, 可以简单实用这个就能保存很多的 ...

  7. Oracle查询优化经验

    1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. (低效,执行时间156 ...

  8. [转]SQLServer和Oracle,存储过程区别,常用函数对比

    本文转自:http://www.cnblogs.com/neru/archive/2011/08/18/2144049.html 以前一直用sqlserver,只有很少的一点oracle的经验,现在要 ...

  9. RHEL5 X86-64上安装Oracle 11gR2演示样例与总结

    进入Oracle DBA行业也有好几年了,可是说到安装Oracle的经验,我还真不是特别多,印象中刚開始每次安装都有点磕磕碰碰,随着接触Oracle的时间越来越长,各方面的原理.机制也都有一定的了解后 ...

  10. Oracle中的AWR,全称为Automatic Workload Repository

    Oracle中的AWR,全称为Automatic Workload Repository,自动负载信息库.它收集关于特定数据库的操作统计信息和其他统计信息,Oracle以固定的时间间隔(默认为1个小时 ...

随机推荐

  1. FUN GAME 一款普通的C++游戏

    凑合看吧,不是完整版. #include<bits/stdc++.h> #include<windows.h> #include<conio.h> using na ...

  2. NC17247 H、Diff-prime Pairs

    题目链接 题目 题目描述 Eddy has solved lots of problem involving calculating the number of coprime pairs withi ...

  3. SAS (Statistics Analysis System) 统计分析系统软件

    SAS SAS (Statistical Analysis System) 是一个统计软件系统,由 SAS Institute 开发, 用于数据管理, 高级分析, 多元分析, 商业智能, 刑事调查和预 ...

  4. Ubuntu下图形界面串口工具CuteCom的安装和升级

    串口的图形界面化工具在Windows下很多, 但是在Linux下可选择的就很少, CuteCom 是相对比较好用的一款了. Ubuntu20.04默认安装的是0.30.3, 这是一个比较早的版本, 最 ...

  5. postgresql中的json和jsonb

    1. 简介postgresql9.3以后,我们可以将表的字段类型设置为json.同时,postgresql还提供了jsonb格式,jsonb是json的二进制形式.二者区别: postgresql9. ...

  6. 硬件开发笔记(十二):RK3568底板电路电源模块和RTC模块原理图分析

    前言   做硬件做系统做驱动,很难从核心板做起,所以我们先依赖核心板,分析底板周围的电路,然后使用AD绘制原理图和设计PCB,打样我司测试底板,完成硬件测试,再继续系统适配,驱动移植,从而一步一步完善 ...

  7. 麒麟系统开发笔记(十一):在国产麒麟系统上使用gdb定位崩溃异常方法流程进阶定位代码行数及专项测试Demo

    前言   上一篇,通过研究,可以定位到函数,本篇进一步优化,没有行数,程序较为复杂的时候,就无法定位,所以进一步定位.  本篇做了qBreakpad的研究,但是没有成功,过程也还是填出来,后来突然注意 ...

  8. Mac环境下, VMware Fusion Pro下的虚拟机( CentOS 7)的 NAT网络配置

    前提实现说明 1.vm版本VMware Fusion Pro 12.1.0 2.centos版本centos7.6 1.虚拟机能访问外网,虚拟机能访问mac本机: 2.mac本机可以连接虚拟机 操作步 ...

  9. 用Docker发布网站时,自动下载Directory.Build.props及其Import的文件

    为Blazor网站项目,"添加Docker支持" 这时,网站项目根目录下会新增Dockerfile. 里面文字内容如下 #See https://aka.ms/customizec ...

  10. 你不得不知道的 MySQL 优化原理

    目录 MySQL逻辑架构 MySQL查询过程 客户端/服务端通信协议 查询缓存 查询优化 查询执行引擎 返回结果给客户端 总结 性能优化建议 Scheme设计与数据类型优化 创建高性能索引 索引相关的 ...