【简单有关问题】模拟Oracle序的锁有关问题
程序员文章站
2022-06-03 14:58:16
...
【简单问题】模拟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
以后多学习下锁机制啊,因为急着要用。
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
相关文章
相关视频
上一篇: MySQL主从库认识
下一篇: php判断当前用户已在别处登录的方法