TA的每日心情 | 开心 2021-12-13 21:45 |
---|
签到天数: 15 天 [LV.4]偶尔看看III
|
Oracle与mysql的区别
mysql是中小型数据库 开源免费
Oracle数据是大型数据库,闭源,收费(个人使用免费,商业用途收费),
主键
mysql可以设置成主键自动增长,在建表是设置主键列为 auto increment
Oracle没有主键自动增长,需要创建一个序列把下一个值赋给该字段即可
分页
mysql使用limit关键字
Oracle使用rownum字段
空字符的处理
Oracle定义非空字段就必须要有值
mysql定义非空字段可以有空的内容
长字符串
Oracle插入和修改时如果字符串长度大于4000个单字节,要考虑使用clob类型
字符串的模糊比较
mysql与Oracle的模糊查询都是使用 like '%字符串%' 但Oracle使用了该模糊查询就不能使用索引 降低了效率
引号的处理
mysql可以用双引号包起字符串 Oracle只能用单引号包起字符串 插入和修改字符串前必须添加单引号
存储过程和函数【重点】
函数是一个特殊的存储过程,存储过程能使用的技术函数都可以使用
函数和过程都是预编译的 一次编译多次执行 效率更高
存储过程使用procedure<婆c觉> 函数使用function
函数必须要有一个返回值(return) 存储过程只能使用out间接返回值 都可以有参数可以没有参数
函数可以在任何地方调用 存储过程只能在plsql中调用
Oracle中有哪几种文件
数据文件(后缀.dbf或者.ora) 日志文件(后缀名.log) 控制文件(后缀名.ctl) 一般在安装目录下的\oraData\orcl
Oracle怎样存储文件,能够存储那些文件
Clob 可变长度的字符数据类型,
Nclob 可变字符类型的数据,一个字符永远占3个字节
Blob 可变长度的二进制数据
Bfile 数据库外面存储的二进制文件
Oracle备份
Oracle使用cmd命令 exp/imp导入导出为二进制文件 可以使用pl/sql Develpoer工具import/export导入导出
Oracle冷备份和热备份的不同点以及各自优点
冷备份需要关闭数据库的情况下,将文件拷贝到另外位置
优点:安全,容易归档,非常快速的备份方法,容易恢复到某个时间点
缺点:备份时数据库不能作其他的工作 若磁盘空间有限,只能拷贝到磁盘以外的设备上
热备份是在数据库运行的情况下,采用归档方式备份数据库的方法
优点:在数据库工作时,也可以进行备份 可以将数据库恢复到任意时间点
缺点:不能出错,若备份不成功,所得到的结果不可用于恢复
truncate和delete
都是删除表的实体
truncate删除不记录到rollback日志,数据无法恢复,所以操作速度较快 数据定义语言(DDL)
delete删除数据将存储在系统回滚段中,需要的时候可以恢复 数据操纵语言(DML)
rowid和rownum
他们都是表中的伪列
rowid是物理地址,用于定位Oracle中具体数据的存储位置 rowid相对不变
rownum是sql查询结果排序 rownum会变化的
优化Oracle数据库【重点】
操作数据库要通过IO操作,读写磁盘速度是比较慢的,我们要减少磁盘的IO 可以对物理逻辑进行优化
物理
可以对硬件进行升级
建立索引=====》<btree索引--值唯一或少许重复 norma索引--允许小范围的重复>
建立表分区
合理配置Oracle
修改最大连接数
禁止回收站功能
逻辑
开发时sql语句要么全部大写要么全部小写并使用占位符语句 oracel会先解析sql语句并放入共享池中
尽量不要使用*号 因为*号要转化为具体的列名 比较耗时
where语句尽量不要使用!= 因为使用了就不使用索引
使用redis缓存
Oracle怎样进行分页
使用rownum进行分页
select g.* from (select t.*,rownum from 表名 t) g where t.rownum>=开始位置 and t.rownum<=结束位置
先把要分页的表查询出来 以查询结果进行子查询分页
什么是死锁 解决死锁问题
死锁
多个线程对同一个资源的争抢
例如:当一个线程对一行数据进行操作没提交 另一个线程对一行数据进行操作没提交 然后他们两个在互相操作对方未提交的数据行 这时会产生死锁
解决
使用dba登录 查看产生死锁的语句:
select s.username,l.object_id, l.session_id,s.serial#, s.lockwait,s.status,s.machine,s.program from v$session s,v$locked_object l where s.sid = l.session_id;
再杀死进程中的会话 结合session_id 和serial#(塞论饿)
alter system kill session 'session_id,serial#';
alter system kill session '301,16405';
删除数据库的重复记录
delete form 表名 t where t.rowid!=(select max(rowid) form 表名 group by (列名))
数据库三范式
列是不可再分的
一张表只能做一件事情
列不予许间接依赖(一张表只能有一个主键)
数据库的隔离级别分别是什么解决了什么问题
读未提交 读已提交 可重复读 串行化
解决了脏读(读取到了用户未提交的数据)
不可重复读(重复读取同一行数据,发现数据被更改了)
幻读(两次读取某一条件的多条数据是,发现多了几条数据),
Oracle中dml、ddl、dcl、tcl
dml数据操纵语言:select delete update insert
ddl数据定义语言:create table drop table
dcl数据控制语言:grant revoke
tcl事务控制语言:commit rollback
什么是ER图
实体与实体的关系
一对多 多对多 一对一
什么是视图 普通视图和物化视图的区别
普通视图是虚拟表 视图指向了一条SQL语句 相当于为该SQL语句取了一个别名
物化视图是一种特殊的物理表 会占用数据库磁盘空间
索引的优缺点
有点:快速查询
缺点:数据量大时 需要加大索引的维护量
表连接
迪卡尔积 交叉连接的结果
内连接 通过条件关联无法关联的丢弃
左外连接 以指定的表为主表 能关联显示 不能关联的主表保留
右外连接 以指定的表为主表 能关联的显示 不能关联的主表保留
全连接 左外连和右外连的结果合并去重复
说说你写过的最大存储过程
在工作中很少写过 存储过程是在数据库中执行的有复杂的逻辑会降低数据库的性能 它也比较难迁移 mysql和Oracle的
存储过程的语法是不一样的 比较难维护
===========================================redis==========
什么是redis
redis是一个key-value存储系统,支持丰富的数据类型,数据存储在内存中 读取效率极高
支持的数据类型
String 值是字符串
List 值是一个集合可重复集合
Set 值是一个不可重复的集合
Sorted Set 值是一个排序的不可重复的数据
Hash 值可以是一个对象
为什么redis把数据放在内存中
内存读写数据要比磁盘快 磁盘中的IO影响性能
redis分布式的模型
redis支持主从的模式 Master(写)会将数据同步到slave(查)这是一个典型的读写分离 这样可以减少单个机器并发的访问数量
redis最经典的方案是 redis cluster 完全去中心化的集群 每一个节点都可以读写
redis的回收策略
当redis数据过多导致内存快使用完了 redis可以启用回收策略
volatile-lru:从过期的数据集中挑选最近最少使用的数据淘汰
volatile-ttl:从过期的数据集中挑选将要过期的数据淘汰
volatile-random:从过期数据集中任意选择数据淘汰
allkeys-lru:从数据集中挑选最近最少使用的
allkeys-random:从数据集中任意选择数据淘汰
redis与Memcached有哪些优势
memcached的值均是简单的字符串 redis支持丰富的数据类型
redis的速度比memcached快
redis可以持久化数据
redis常用的场景
会话缓存
Tomcat集群session方案 将session数据缓存在redis
分布式获取主键
队列
排行榜
发布和订阅
|
|