Oracle学习心得(干货)

1、orcale不区分大小写,标志符(表名,列名,别名等)是区分大小写的;标志符没有加双引号,默认自动转换为大写执行
2、orcale中双引号作用:转义非法标志符为合法,强制标志符原始大小写执行
3、oracle中日期类型没有常量这一说,默认日期字符串格式dd-mon-rr
4、oracle空值和任何值作比较运算结果一定为假,oracle数据库没有布尔值true和false
5、in(值列表):如果表达式等于值列表中的任意一个值,就为真;not in(值列表):表达式不等于值列表中的任意一个值,才为真
6、like:模糊查询 not like 逻辑非,通配符%代表0到多个任意字符 _代表1个任意字符
7、排序子句:order by 排序表达式 asc升序(不写默认) desc降序,排序操作非常耗费资源,大量数据排序,必须提前做好数据库的优化
8、单行函数,每次执行函数,传入一行列值,返回一个结果;多行函数,每次执行函数,传入多行列值,返回一个结果
9、RDBMS关系型数据库管理系统:核心就是表和表之间的关系
主表:数据被从表引用
从表:从主表中引用数据
主键:主表中的唯一标识列,主键的值不能重复,不能为空
外键:从主表中引用主键数据的那一列,外键值可以重复,也可以为空,必须是引用的主键列中存在的值
表和表之间的三种关系:
一对多:主表的一条记录对应从表的多条记录
一对一:主表的一条记录对应从表的一条记录
多对多:一个表的多条记录对应另一个的多条记录(必须通过中间表来衔接,由两个一对多关系间接形成)
10、数据库设计三范式:
第一范式:列不可分割(列的数据必须明确,不能一个列表达两个数据)
第二范式:表必须有一个主键标识符
第三范式:从表中不能出现引用主表中的非主键列
11、SQL99连接查询,效率比92语法高
内连接:inner join,仅查询满足连接条件的数据(默认)
外连接:查询满足连接条件的数据,不满足连接条件的数据也返回
左外连接:left outer join
有外连接:right outer join
满外连接:full outer join
连接条件:on 连接条件表达式
自连接:把一个表看成两个表
12、分组函数
sum求和、avg求平均值、max求最大值、min求最小值、count计数
13、子查询:查询语句中包含的查询,也称为嵌套查询,主查询子查询(外查询内查询),如果同时能使用子查询和连接查询实现,尽量使用连接查询,效率高,子查询必须写在括号中,尽量写在条件右侧,提高效率
14、any:逻辑或,例如 >any;all:逻辑与,例如 >all
15、 标准子查询 相关子查询(内外交互式相关子查询)
执行顺序 子查询先,主查询后 主查询先,子查询后
使用数据 主查询使用子查询结果 主查询和子查询互相使用查询结果
执行次数 执行一次 执行次数=主查询的结果集的行数
16、exists(子查询):如果查询有结果,返回真,否则返回假;not exists(子查询):如果子查询有结果,返回假,否则返回真
17、DML语句:数据操纵语言,插入,删除,修改表数据
插入单行数据:insert into 表名[(列1,列2,……)]values(值1,值2,……)所有值必须个数,顺序,类型保持一致,省略列列表,默认就是所有列
多行插入:把一个子查询的结果直接插入到另一个表,insert into 表名[(列1,列2,……)]子查询
修改数据:主键值已经生成,后期不允许修改,update 表名 set 列1=值,列2=值,……[where子句]
删除数据:delete from 表名 [where子句]
18、数据事务transaction:保证一个操作的完整性,要么一起成功,要么都不执行
事务的ACID四个特性:
原子性:提个实务操作必须是一个完整操作,要么一起成功,要么都不执行
一致性:必须从一个正确的状态直接过度到下一个正确的状态
隔离性:一个会话无法访问另一个会话未提交的数据(脏数据)
持久性:事务一旦提交,数据改变会直接持久化到数据库,其他会话可以访问,不能回退
开始事务:任意一条DML都会开启一个新事务
结束事务:
提交事务:
commit语句
DDL,DCL语句自动提交事务
正常退出客户端工具(例如命令行exit退出)
回退事务:
rollback语句
异常退出客户端工具
19、锁机制:避免用户并发访问数据,锁在事务结束后被释放
锁按照粒度划分:行级锁和表级锁
锁按照类型划分:
共享锁(s锁):如果一个资源(行、表)加上了共享锁,其他会话可以给这个资源也加上共享锁,但是不能加独占锁
独占锁(x锁,排他锁):如果一个资源(行、表)加上了独占锁,其他会话不能给这个资源加任何锁
锁按照加锁方式划分:自动锁和手动锁
自动加锁的情况:
查询语句:默认不加任何锁
DML语句:行独占锁,表共享锁
DDL语句:表独占锁
手动加锁:
查询加锁:查询语句 for update;(行独占锁,表共享锁,会像DML一样开启事务)
手动锁表:
乐观锁定:lock table 表名 in share mode;
悲观锁定:lock table 表名 in exclusive mode;
死锁:两个会话的事务相互等待对方释放锁才能继续向下进行
20、DDL(数据定义语言):创建(create table),修改(alert table),删除(drop table)数据库对象
数据表的分类:用户表和系统表(数据字典)
用户表 : 用户自己创建的数据表
系统表(数据字典):数据库本身创建维护的,存储的是系统信息
清空表 delete truncate
可以回退 不能回退
逻辑删除 物理删除
记录日志 不记录日志
21、约束:限制对表的DML操作,约束既可以创建表同时添加,也可以表创建后追加
not null :非空约束
primary key:主键约束,限制主键列值不能为空且不能重复,一个表只能有一个主键,一个主键可以由多列组成
unique:唯一值约束,限制列值不能重复,不限制空值,一个表可以有多个唯一值约束
check:检查约束, 限制列值符合自定义条件,忽略空值检查,空值不做检查
foreign key:外键约束, 限制外键列值必须是引用的主表中的主键列中存在的值
追加约束
alter table 表名
add constraints 约束具体设置:
外键级联删除:删除主表数据会自动删除引用的从表数据
外键级联置空:删除主表数据会自动级联引用的从表外键为空值
22、视图:保存的不是真实数据,而是查询语句(除非是物理化视图,保存的是真实数据)
作用:控制用户访问权限,简化一些复杂的查询
创建视图对象:必须有create view权限,如果视图的查询语句中有衍生列,必须起别名
create or replace view 视图名称
as
查询语句
物理化视图:存储的是物理数据,需要通过程序手动刷新同步数据
23、序列:自动生成的自增编号,主要用于生成主键值
24、索引:加快查询速度:但是会降低DML速度,默认情况下,条件检索做的是全表扫描,创建的索引默认都是B-TREE索引,适合列基数比较高的情况
RBO基于规则的优化:如果列有索引,查询一定会走索引,即使走索引更慢,也会走索引
CBO基于代价的优化:数据库只能判断是否应该走索引,如果不走索引更快,那么有索引也不会走索引,做全表扫描(oracle默认)
适合创建索引的清空:
1、列的基数比较高(重复值很少)
2、不以空值做条件,索引对查询空值无效
3、列值经常作为条件查询
4、表数据量很大
5、经常做查询操作,很少做DML操作
6、满足查询条件的数据不超过总记录的15%
7、模糊查询不走索引,如果模糊查询希望提高效率,必须使用全文检索技术
25、同义词:给对象起别名,简化对象的名称
26、DCL:用户权限管理
授权语句:grant 权限1,权限2,…… to 用户;
收权语句:revoke 权限1,权限2,…… from 用户;
27、set集合运算:把多个查询结果进行并集,交集和补集运算,多个查询结果必须是列的个数,顺序,类型保持一致
并集union(自动消除重复行)
并集union all(不消除重复行)
交集intersect
补集minus

你可能感兴趣的:(Oracle学习心得(干货))