【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
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. Ubuntu安装PHP和NGINX环境

    Ubuntu安装PHP和NGINX环境 介绍 PHP-FPM PHP-FPM 是 PHP FastCGI Process Manager 的缩写,是 FastCGI 进程管理器. PHP-FPM 是基 ...

  2. NC16697 [NOIP2001]Car的旅行路线

    题目链接 题目 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中 ...

  3. springboot 实现拦截的 3 种方式介绍及异步执行的思考

    springboot 拦截方式 实际项目中,我们经常需要输出请求参数,响应结果,方法耗时,统一的权限校验等. 本文首先为大家介绍 HTTP 请求中三种常见的拦截实现,并且比较一下其中的差异. (1)基 ...

  4. ORACLE SEQUENCE 详解

    1.    About Sequences(关于序列) 序列是数据库对象一种.多个用户可以通过序列生成连续的数字以此来实现主键字段的自动.唯一增长,并且一个序列可为多列.多表同时使用. 序列消除了串行 ...

  5. B - Bracket Sequence题解

    B - Bracket Sequence 思路: 用一个flag来标记括号的数目,如果括号数目是个偶数的话,就代表当前要执行'+'操作,反之就是'*'操作.对于最外层的数,是没有计算的. 所以最后要单 ...

  6. KPTP 汇报模板

    1.什么是KPTP 它是由4个单词:Keep.Problem.Try.Plan的首字母组成的. K:keep,今天做了哪些工作: P:problem,遇到了哪些问题: T:try,计划尝试如何解决这些 ...

  7. pyqt5学习示例

    python代码编写pyqt5 主窗口的类型:有三种窗口 # 相关函数方法 setWindowTitle() # 设置主窗口的标题 resize() # 设置窗口的大小 statusBar() # 创 ...

  8. 【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误

    问题描述 使用Docker Compose方式合并多个镜像(Images)文件,然后部署到App Service中,结果失败.报错 Linux Version 太长,不能超过4000个字符. 错误消息 ...

  9. 【Azure Developer】CURL 发送Oauth2 Token请求获取到 404 Not Found 问题

    问题描述 当使用 Postman 向AAD 发送如下请求时候,得到了404 Not Found的错误. "curl --location --request POST 'https://lo ...

  10. 【Azure 应用服务】Azure Function 中运行Powershell 脚本,定位 -DefaultProfile 引发的错误

    问题描述 突然之间,使用PowerShell脚本 Get-AzVirtualNetwork 获取虚拟网络信息时,如果带上  -DefaultProfile $sub 参数,就出现 Azure cred ...