几个主要关系型db,加锁的对象的区别呢?例如mysql是加在索引上,oracle,pg是加在哪里呢??
在关系型数据库中,加锁的对象可以按照锁的粒度分为行级锁、表级锁和页级锁。MyISAM和InnoDB存储引擎使用的锁:MyISAM采用表级锁,InnoDB支持行级锁和表级锁,默认为行级锁。
MySQL中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁和排他锁。共享锁允许多个事务同时读取一行数据,但不允许写入;排他锁则相反。
Oracle和PostgreSQL等其他关系型数据库也有类似的机制,但是具体实现可能会有所不同。例如,Oracle使用表级锁定(table-level locking)来保护整个表或视图,而PG使用行级锁定(row-level locking)来保护每行数据。