1 、 理解锁 什么是锁
锁 是一种软件机制,用于控制对数据库中的数据的访问
在出现同时读取和更新数据的多用户环境中,锁能够确保每个事务的原子性、隔离、一致性和持续性(ACID)不受到威胁,并且维护数据的完整性
锁的粒度 Informix 提供各种粒度的锁
它们是: 数据库锁:针对整个数据库的锁 表锁:针对整个表的锁 页锁:针对整页数据的锁 行锁:针对一个数据行的锁 字节锁:在包含 VARCHAR 的行上的锁 键锁:在索引中的一个键值上的锁 锁的粒度越粗,它就能锁住越多的数据库对象
例如,对于能够在一个磁盘页上包含 4 行的表,在该页放置一个锁将锁住其中包含的所有 4 个行
相反,如果使用行锁,那么将仅锁住一个行
因此,锁的粒度越粗,并发性就越低,从而影响到性能,尤其是应用程序试图访问相同的行集时
不过,粗粒度也意味着在某些情况下锁住相同数量的行需要的锁数量更少
例如,锁住整个表仅需要一个表锁
表的锁模式 创建一个表时,它的默认锁粒度是页锁
可以在创建表的过程中使用 LOCK MODE 子句覆盖默认值
例如: CREATE TABLE t1(c1 int) LOCK MODE ROW; 这个上下文中的锁模式表明访问表时需要使用的锁的粒度
如果从 CREATE SQL 语句省略掉这个 LOCK MODE 子句,那么就使用默认的锁模式
如果表已经创建,那么可以使用 ALTER TABLE 语句更改锁模式
对于以上提到的表 t1 例子,您可以使用下面的 ALTER 语句将锁模式从行锁更改页锁: dbaccess db1 - ALTER TABLE t1 LOCK MODE(PAGE); 可以使用配置参数 DEF_TABLE_LOCKMODE 更改已创建的表的默认锁模式
该参数的值可以是 ROW 或 PAGE
例如,如果 DEF_TABLE_LOCK