Home >Backend Development >PHP Tutorial >【简单有关问题】模拟Oracle序的锁有关问题

【简单有关问题】模拟Oracle序的锁有关问题

WBOY
WBOYOriginal
2016-06-13 10:07:02865browse

【简单问题】模拟Oracle序的锁问题。
以后多学习下锁机制啊,因为急着要用。

MYSQL 模拟ORACLE 的序。
CREATE TABLE `pb_sequence` (
  `sequence_id` int(11) NOT NULL DEFAULT '0',  
  `sequence_name` varchar(25) DEFAULT NULL,
  `sequence_value` bigint(20) DEFAULT NULL,
  `sequence_type` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`sequence_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

sequence_name:序的名称
sequence_value:序的值

我在取得 select sequence_value from pb_sequence where sequence_name= 'mysql_sequence' 
大家知道我查询的时候,就要锁定这条记录。 任何人都不能查询这条记录。 否则数据就不一致了。
然后 update pb_sequence set sequence_value = sequence_value +1 where sequence_name= 'mysql_sequence' 
等我update后才能释放锁。
-----------------------

能否用PDO写这个句子? 这个和PDO有关吗? 还是只与SQL语句有关? 因为我看PDO只有开启事务。
PDO 好像没有什么设置可以让你查询的时候,别人都阻塞啊? 





------解决方案--------------------
SELECT ... FOR UPDATE
http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn