-
七、一级缓存(二)-- 用户与一级缓存、数据库的交互顺序
2020-07-23 15:28:50用户做查询操作时,都会将查询的对象存储到一级缓存中。 2.用户做更新操作时,都会先将操作的对象存储到缓存中。然后通过session.flush()将一级缓存与数据库同步。 二、一级缓存中的数据获取 用户做查询...一、一级缓存中的数据存储
1.用户做查询操作时,都会将查询的对象存储到一级缓存中。 2.用户做更新操作时,都会先将操作的对象存储到缓存中。然后通过session.flush()将一级缓存与数据库同步。
二、一级缓存中的数据获取
用户做查询操作时, 1.如果是简单主键查询,都会先从缓存中获取数据。 如果没有,才会到数据库中查找数据, get()、load() 主键查询 iterator() iterator()底层也是简单的主键查询 2.如果是批量查询,则会直接从数据库中获取数据。 list()
get()、load() 首先会从一级缓存中获取数据,如果没有才会到数据库查询数据。 同时将查询的数据存储到缓存中。 list() 不会从一级缓存中获取数据。 直接从数据库中获取数据。只生成一条sql语句。 同时将查询的数据存储到缓存中。 iterator() 会从缓存中获取数据。 首先生成一条查询主键ID的语句, 然后调用it.next(),根据主键ID查询。首先会从一级缓存中获取数据,如果没有才会到数据库中查找数据。
三、一级缓存与数据库的同步( 持久化对象与数据库的同步)
1.用户做更新操作时,首先会将对象转化为持久化对象。再根据相关操作对对象作出相关标记。 save() 保存对象到一级缓存,并打上保存标记 update() 修改对象到一级缓存,并打上修改标记。 delete() 删除对象到一级缓存,并打上删除标记。 saveOrUpdate() 保存或修改对象,并打上相关标记。 2.调用session.flush()生成sql语句,并执行。将一级缓存与数据库同步。 它会根据持久化对象的标记生成不同的sql语句,并执行。
四、 用户与一级缓存、数据库交互顺序
查询对象: 如果是简单主键查询,首先会先从缓存中查找对象,如果没有就会从数据库中查找,然后存储到缓存中。 如果是批量查询,则直接从数据库中获取数据, 更新对象(增、删、改): 首先将更新的对象存储或更新到缓存中,并打上相应的标记。 当事务提交时,再根据标记进行提交缓存中的数据。
五、其他
5.1 get()\load()
get(): 1.立即加载。 2.获取的对象是对象。 3.如果查询的对象不存在,返回NUll。 load() 1.延时加载。只有在使用对象时,才查询。 2.获取的是代理对象。其作用就是实现延时加载。 3.如果查询的对象不存在,则返回一个异常ObjectNotFoundException 。 4.如果session关闭,第一次使用load()获取的代理对象,则会报错。
5.2 list()\iterator()
list() 直接生成一条sql语句。从数据库中查询数据, Iterator it=qr.iterator() it.next() 首先会生成一条sql语句,查询所有符合条件的数据的主键ID。 然后在根据主键ID,一条一条查询数据。 iterator() -- 首先会生成一条sql语句,查询所有符合条件的数据的主键ID。 it.next()-- 然后根据ID一条一条查询数据。
5.3 多条sql何为一条sql
1.用户操作只与一级缓存进行交互,用户多次修改数据,也只是修改一级缓存中的数据。 2.只有调用session.flush()\session.getTracsaction.commit() 时才会生成sql。将一级缓存与数据库同步。 3.虽然用户多次修改数据,但是也只是更新了持久化对象。 用户调用session.flush()时,它根据持久化对象的更新标志,然后生成sql作出同步。
public static void main(String[] args) { session.beginTransaction(); UserEntity user=(UserEntity) session.get(UserEntity.class, 2); //修改一次 user.setAge(12); session.update(user); //修改两次 user.setAge(13); session.update(user); session.flush(); }
5.4 session.flush()\session.getTracsaction.comit()
session.flush() 生成一条sql语句,将一级缓存与数据库同步。 session.getTracsaction.comit() 生成一条sql语句,将一级缓存与数据库同步。 并提交事务。 【它内部隐式调用了session.flush()】 不同点: 如果只使用了session.flush(),只会生成sql并执行。 但最后由于事务没提交,数据依旧回滚。 如果只使用了session.getTracsaction.comit()。 它不仅会生成sql并执行, 还会提交事务,将执行的sql数据持久化。
5.5 update() 的变形
5.5.1 使用update()方法做更新
public static void main(String[] args) { session.beginTransaction(); UserEntity user=(UserEntity) session.get(UserEntity.class, 2); //修改一次 user.setAge(12); session.update(user); session.getTransaction().commit(); }
5.5.1 使用update()方法的变形做更新
public static void main(String[] args) { session.beginTransaction(); UserEntity user=(UserEntity) session.get(UserEntity.class, 2); //修改一次 user.setAge(122); session.getTransaction().commit(); }
5.6 session.flush() 会将一级缓存与数据库同步,同时重置持久化对象的状态。
5.6.1 将多条sql合成了一条。只更新一次
public static void main(String[] args) { session.beginTransaction(); UserEntity user=(UserEntity) session.get(UserEntity.class, 2); //修改一次 user.setAge(122); user.setAge(144); session.flush(); }
5.6.2 session.flush()重置持久化对象的状态,生成两条sql
public static void main(String[] args) { session.beginTransaction(); UserEntity user=(UserEntity) session.get(UserEntity.class, 2); //修改一次 user.setAge(111); session.flush(); user.setAge(222); session.flush(); }
5.7 sql的创建时间
只有调用sesison.flush() 或session.getTransaction.commit()方法时, 才会生成sql并执行。否则不会生成sql语句。
5.7.1 session的更新操作操作的只是持久化对象,不会生成sql
public static void main(String[] args) { session.beginTransaction(); UserEntity user=(UserEntity) session.get(UserEntity.class, 2); //修改一次 user.setAge(1112); session.update(user); }
5.7.2 使用session.flush()会生成sql
public static void main(String[] args) { session.beginTransaction(); UserEntity user=(UserEntity) session.get(UserEntity.class, 2); //修改一次 user.setAge(1112); session.update(user); session.flush(); }
-
synonym及数据库对象权限控制-随想
2014-09-21 08:40:51用Synonym 同义词拥有如下好处:节省大量的数据库空间,对不同用户的操作同一张...扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;同义词可以创建在不同一个数据库服务器上,通过网络实现连接。1. Synonym
CREATE [PUBLIC] SYNONYM synonym FOR object;
同义词拥有如下好处:节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;同义词可以创建在不同一个数据库服务器上,通过网络实现连接。
想起以前做数据库迁移的一种情况。应用程序针对数据库synonym编程。这样即使数据库物理迁移(服务器从英国搬到纽约)也不会有影响。
2. view,存储过程,web service能屏蔽用户访问底层表或者服务的细粒度的权限。这样可以在上层做大粒度的权限控制
-
数据库系统基础:高级篇(第5版)(讲述数据库系统原理的经典教材)--详细书签版
2013-04-05 14:33:11他的主要研究方向是工程设计、生物(特别是人类基因组)数据库、文档及文本数据库等新兴应用中的数据库建模。设计和集成,此外,他对知识表示、数据挖掘和知识发现等也非常感兴趣。 目录 封面 -15 封底 -14 扉页 -13 ... -
数据库系统基础:初级篇(第5版)(讲述数据库系统原理的经典教材)--详细书签版
2013-04-05 13:45:32他的主要研究方向是工程设计、生物(特别是人类基因组)数据库、文档及文本数据库等新兴应用中的数据库建模。设计和集成,此外,他对知识表示、数据挖掘和知识发现等也非常感兴趣。 目录 封面 -17 封底 -16 扉页 -15 ... -
达梦数据库创建公共同义词和私有同义词
2020-11-05 14:38:35它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,数据库将它...达梦数据库创建公共同义词和私有同义词
写这篇文章是我实际工作中遇到用户提问,DM可不可以像ORACLE一样不带模式名直接查询表数据。用户的问题中有两个关键点分别为:1、为DM支不支持类似ORACLE的同义词功能,包括公共同义词和私有同义词;2、DM创建同义词和利用同义词做查询等操作时的方法;通过查找资料和实践,DM支持同义词并且创建方法和使用方法与ORACLE一样;
网上搜索DM同义词并没有查到详细的同义词创建方法步骤的博文,所以我开文分享下从创建用户赋权到创建同义词的所有操作。方便志同道合的朋友交流学习。一、同义词概念
1、同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系。它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。
2、同义词分类
同义词有两种类型,分别是公用同义词与私有同义词。普通用户创建的同义词一般都是私有同义词,公有同义词一般由DBA创建,普通用户如果希望创建同义词,则需要CREATE PUBLIC SYNONYM这个系统权限。
1)公用同义词:由一个特殊的用户组Public所拥有。顾名思义数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标一些比较普通的数据库对象,这些对象往往大家都需要引用。
2)私有同义词:它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。3、同义词作用
1)多用户协同开发中,可以屏蔽对象的名字及其持有者。如果没有同义词,当操作其他用户的表时,必须通过user名.表名的形式,采用了同义词之后就可以隐蔽掉user名,当然这里要注意的是:public同义词只是为数据库对象定义了一个公共的别名,其他用户能否通过这个别名访问这个数据库对象,还要看是否已经为这个用户授权。2)为用户简化sql语句。上面的一条其实就是一种简化sql的体现,同时如果自己建的表的名字很长,可以为这个表创建一个同义词来简化sql开发。
3)同义词在数据库链接中是一个命名的对象,说明一个数据库到另一个数据库的路径,通过其可以实现不同数据库之间的通信。Createdatabase link 数据库链名 connect to user名 identified by 口令 using ‘连接串’; 访问对象要通过 object名@数据库链名。同义词在数据库链中的作用就是提供位置透明性。
5)与同义词相关的权限有CREATE SYNONYM、CREATE ANY SYNONYM、CREATE PUBLIC SYNONYM权限。
二、DM数据库中创建同义词
1、创建测试用户:
创建测试用户:DM
给予用户角色:PUBLIC
给予用户权限:
语句创建:
1、创建用户:
create user "DM " identified by “111111111”
limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10;
2、给予创建同义词权限,如果需要在其它模式下创建同义词,则必须具有CREATE ANY SYNONYM的权限。:
grant CREATE SYNONYM,CREATE PUBLIC SYNONYM to "DM ";
2、创建同义词
测试用户登录:
1、 创建私有同义词:
语句:CREATE SYNONYM “DM”.“tset” FOR “DM”.“DM_test”;
2、 创建公共同义词:
选中公共同义词右键选择创建公共同义词
语句:CREATE PUBLIC SYNONYM “DM_TEST” FOR “DM”.“DM_test”;
3、 创建同义词后即可实现隐蔽掉模式名:
三、同义词语法:
普通用法如下所示:
CREATE [OR REPLACE] [PUBLIC] SYNONYM [ schema.] 同义词名称 FOR [ schema.] object [ @dblink];
–专有(私有)同义词
CREATE SYNONYM SYSN_TEST FOR TEST;
–公共同义词
CREATE PUBLIC SYNONYM PUBLIC_TEST FOR TEST;
注:
1、同义词是和用户的schema无关的,但是公共的意思并不是所有的用户都可以访问它,必须被授权后才能进行;
-
oracle mysql 同义词_Oracle数据库创建同义词(synonym)详细讲解
2021-01-28 01:53:19它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,...1.1数据库创建同义词(synonym)
Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系。它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在Oracle数据库中的大部分数据库对象,如表、视图、物化视图、序列、函数、存储过程、包、同义词等等,数据库管理员都可以根据实际情况为他们定义同义词。创建同义词,访问不同用户下的表,不用加用户名。(意思就是取了一个公用的别名)
1.1.1在同一数据库下创建同义词(synonym)
第一步:创建新用户,以及访问不同用户下的表,必须授予以下权限
(1) create user test_1/test_2 identified by 123;
(2) grant resource,connect to test_1;
(3) grant select any table to test_1;
第二步:授予创建同义词(synonym)的权限
grant create any synonym to test_1;
第三步:创建同义词,并进行访问
(1)create synonym teacher for test_2.teacher;
(2)select * from teacher;(在用户test_1中进行查询)
1.1.2在不同数据库下创建同义词(synonym)
第一步:建立DBLink
create public database link test_others_course
connect to test_others identified by "456"
using'(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.106)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)';
第二步:建立同义词
create synonym course for course@test_others_course;
第三步:进行操作(在用户test_1中进行操作)
select * from course;
update course set cname='计算机导论' where tno='825';
-
数据库学习基础之名词解释
2011-06-11 22:27:21(1)完善地管理各种数据库对象,具有强大的数据组织、用户管理、安全检查等功能。 (2)强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户数据库管理系统具有传统的XBASE(DBASE、FoxBASE... -
Oracle Database 11g数据库管理艺术--详细书签版
2012-09-30 01:09:456.2.4 数据库对象的存储分配 175 6.2.5 增加表空间的大小 176 6.2.6 删除表空间 177 6.2.7 用户表空间的数目 178 6.2.8 表空间限额 178 6.2.9 主动的表空间的空间预警 178 6.2.10 管理重做数据的生成 ... -
如何减少数据库应用死锁
2012-07-18 19:45:011.按同一顺序访问对象,如果所有并发执行的事务都按照同一个顺序访问对象,发生死锁的可能性就会降低 2. 不要在事务中出现和用户交互,如果用户长时间不响应,则事务只要挂起 3.尽量使事务短小简练,一个长事务... -
如何减少数据库应用死锁
2007-12-20 18:05:001.按同一顺序访问对象,如果所有并发执行的事务都按照同一个顺序访问对象,发生死锁的可能性就会降低2. 不要在事务中出现和用户交互,如果用户长时间不响应,则事务只要挂起3.尽量使事务短小简练,一个长事务执行的... -
循序渐进Oracle:数据库管理、优化与备份恢复(第二版)--详细书签版
2013-02-06 15:46:3810.3.1 Oracle的数据库级闪回 507 10.3.2 Oracle的flashback drop功能 511 10.3.3 Oracle 10g的Flashback Version Query 517 10.3.4 通过Flashback Transaction Query进行事务撤销 519 10.3.5 闪回表 520 ... -
基于objectARX的Auotocad的二次开发完整教程(同9个章节武汉大学测绘学院教学版)
2012-09-05 09:35:27基于objectARX的Auotocad的二次开发完整教程(同9个章节武汉大学测绘学院教学版),主要内容包括:用户交互,autocad数据库,实体对象,扩充数据,几何类,用户界面,自定义对象,反应器等。这是武汉大学测绘学院... -
-
ios中NSUserDefaults的用法
2014-07-15 09:12:30你可以在程序运行的时候从用户默认的数据库中读取程序的设置。同时NSUserDefaults的缓存避免了在每次读取数据时候都打开用户默认数据库的操作。可以通过调用synchronize方法来使内存中的缓存与用户默认系统进行同步... -
北大青鸟ACCP 6.0 软件开发初级程序员:使用Java实现面向对象编程.pdf
2012-07-13 20:15:1209年6月14日,IBM全球同步发布了一款具有划时代意义的数据库产品——DB2 9.5,而这款新品最大特点即是率先实现了可扩展标记语言(XML)和关系数据间的无缝交互,而无需考虑数据的格式、平台或位置。 ACCP6.0课程... -
oracle symonym_ORACLE同义词总结
2020-12-28 19:31:18它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,... -
oracle 同义词和database link
2019-07-02 11:50:00它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。... -
分享知识-快乐自己:Oracle中定义及使用同义词
2019-09-26 12:54:39Oracle 同义词概念: ...它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。 同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象... -
oracle dblink 权限_ORACLE同义词总结
2021-01-20 00:09:32它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,... -
ORACLE同义词总结
2017-05-10 08:04:24它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,... -
同意词(SYNONYM)
2017-12-15 10:45:25它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,... -
同义词
2017-09-18 18:52:31它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,O -
物化视图、序列、函数、存储过程、包、同义词
2018-01-05 14:04:13它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义 -
同义词简解
2017-06-22 15:30:17它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracl -
Oracle SYNONYMS
2019-05-05 00:03:38--它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围, --能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。 --同义词是数据库对象的一个... -
ORACLE同义词汇总
2017-03-28 11:48:15它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracl