Hibernate Community Documentation 之 Chapter 5. Locking 锁(翻译)

私人翻译,如有错误请大胆指出,我相信不会有人转载:) 原文见https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html 所谓“锁”是指用来在关系型数据库中防止在数据读取(read)到数据使用(used)之间其内容发生变化的操作。 锁的实现分为两种,分别是乐观(Optimistic)与悲观(Pessimestic)。 锁策略 乐观锁 乐观锁假设多组事务(transaction)能够互不干涉地并发完成,因此这些事务执行时不需要将他们影响到的数据加锁。在事务提交(commit)前,每个事务都会校验以确保它的数据没有被别人改动过。如果校验的结果是已有修改冲突(conflicting modifications),整个事务就会回滚(rollback)。 悲观锁 悲观锁假设事务之间会相互冲突,因此要求在数据读取时上锁,直至数据使用完毕后才释放锁。   Hibernate为以上两种锁策略都提供了支持。 5.1 乐观锁 Optimistic 如果你的应用使用了长事务或是由许多数据库事务组成的会话(conversation),你可以通过存储版本(version)数据使得当一个实体(entity)被两个会话更新时,最后一个提交更改的会话会被告知出现冲突,并且此时不会影响到前一个会话进行的更改。该方法保证了一定的隔离性,扩展性好且特别适用于常读取、少写入(Read-Often Write-Sometimes)的场景。 5.1.1 专用版本号 Dedicated version number 实现乐观锁的版本号机制是通过 @Version 注释来实现的

此处,Version属性被映射到OPTLOCK列,实体管理器(the entity manager)通过这个注释来检测有冲突的更新,借此防止数据更新被最后一个写入提交操作给覆盖(last-commit-wins)。 Version列可以是任意类型的,只要你定义并且实现一个自定义的UserVersionType即可。 Hibernate禁止你的应用手动变更版本号(version number)。如需手动增加版本号,请查看下列相关文档: LockModeType.OPTIMISTIC_FORCE_INCREMENT 或 LockModeType.PESSIMISTIC_FORCE_INCREMENTcheck。 如果版本号是由数据库通过注入triggert自动生成的,需使用注释 @org.hibernate.annotations.Generated(GenerationTime.ALWAYS)

column 存储版本号的列名. 可选,默认是属性名. name 需要持久化的类名 type 版本号存储类型. 可选,默认是 integer. access Hibernate访问属性时使用的方式. 可选, 默认是 property. unsaved-value Indicates that an instance is newly instantiated and
Continue reading Hibernate Community Documentation 之 Chapter 5. Locking 锁(翻译)

MYSQL获取自增ID

参考: http://flandycheng.blog.51cto.com/855176/280224 http://www.cnblogs.com/badtree/articles/2143103.html http://my.oschina.net/fz04003/blog/63327 比较简单的方法是: insert/select…等操作 然后直接下一条语句:

LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。 看参考文献中说,多用户的情况下这个方法不能用。不过在php环境下,单用户用足够的。  

MySQL 引擎选择 MyISAM 还是 InnoDB?

建表的时候会选择数据库引擎,常用的有MyISAM和InnoDB,到底选哪个呢? 参考文献: http://drizzlewalk.blog.51cto.com/2203401/443266 http://www.rackspace.com/knowledge_center/article/mysql-engines-myisam-vs-innodb http://stackoverflow.com/questions/20148/myisam-versus-innodb http://www.pureweber.com/article/myisam-vs-innodb/ 什么是MyISAM? MyISAM是MySQL关系数据库管理系统的默认储存引擎。这种MySQL表存储结构从旧的ISAM代码扩展出许多有用的功能。在新版本的MySQL中,InnoDB引擎由于其对事务,参照完整性,以及更高的并发性等优点开始广泛的取代MyISAM。 每一个MyISAM表都对应于硬盘上的三个文件。这三个文件有一样的文件名,但是有不同的扩展名以指示其类型用途:.frm文件保存表的定义,但是这个文件并不是MyISAM引擎的一部,而是服务器的一部分;.MYD保存表的数据;.MYI是表的索引文件。 什么是InnoDB? InnoDB是MySQL的另一个存储引擎,正成为目前MySQL AB所发行新版的标准,被包含在所有二进制安装包里。较之于其它的存储引擎它的优点是它支持兼容ACID的事务(类似于PostgreSQL),以及参数完整性(即对外键的支持)。 Oracle公司与2005年10月收购了Innobase。Innobase采用双认证授权。它使用GNU发行,也允许其它想将InnoDB结合到商业软件的团体获得授权。 MyISAM vs Innodb – Quick comparison Table | 快速比较表: MyISAM Innodb Not *ACID compliant and non-transactional *ACID compliant and hence fully transactional with ROLLBACK and COMMIT and support for Foreign Keys MySQL 5.0 Default Engine Rackspace Cloud Default Engine Offers Compression Offers
Continue reading MySQL 引擎选择 MyISAM 还是 InnoDB?

phpMyAdmin中设置外键Foreign Key

恩~最近在倒腾百度云,因为建表什么的不想输入命令,所以用了phpMyAdmin的界面~ 创建好之后发现找不到怎么设外键的,于是谷歌了一下~ http://stackoverflow.com/questions/459312/setting-up-foreign-keys-in-phpmyadmin 这里有详尽的解释~另外看了几篇中文的~ 总归是 数据库类型貌似要设置成InnoDb才行(我也不知道是真是假) 搞定之后在需要有外键的库底下找到Relation View,然后设置 外键的其他必要条件就不叨叨了~