阻止其他用户同时插入数据

时间:2014-12-15 12:07:20

标签: php mysql locking

我有一个php脚本,用户可以编写内容,点击某个按钮后,写入的数据将与当前data一起插入到mysql表timestamp中。很简单。现在,因为我想基于最高timestamp从表中提取数据,所以我希望我的查询只提取将是最后一行的单行数据。牢记这一点我不能允许2个或更多用户同时插入数据,这将产生完全相同的时间戳,在查询数据时,这个时间戳将违背我的目的。虽然我知道生成完全相同的时间戳的几率非常低,但我希望安全起见。这是我试过的

$sql_lock_table = $db->prepare("LOCK TABLES comments WRITE");
$sql_lock_table->$db->execute();

$time = time();
$data = "some data";

$sql_insert = $db->prepare("INSERT INTO data VALUES(null, :time, :thedata)");

$sql_insert->execute(array(
    "time" => $time,
    "thedata" => $data
    ));

$sql_unlock_table = $db->prepare("UNLOCK TABLES");
$sql_unlock_table->$db->execute(); 

我从另一个stackoverflow问题得到了锁定和解锁的东西,但我还没有清楚为什么在插入之前锁定表格,因为它不允许任何人插入数据。所以我发现我是对的。没有插入。我该怎么做才能实现我想做的事情?

2 个答案:

答案 0 :(得分:0)

根据MySQL的属性,它不允许同时插入两个数据。因此,您不需要采取任何预防措施。

检查以下链接

http://dev.mysql.com/doc/refman/5.6/en/internal-locking.html

答案 1 :(得分:0)

你能指定表引擎吗?

如果你的表是 InnoDB ,则可以在 MyISAM 引擎的同时发生2个插入语句,将LOCK表用于插入操作,防止其他插入发生。

如果您不需要InnoDB,如果您将其更改为MyISAM,则mysql引擎将注意只能进行一次插入,其他将阻塞,直到当前的一次完成

结帐:What's the difference between MyISAM and InnoDB

希望这会有所帮助...