MySQL的脚本是“线程安全的”吗?

时间:2012-03-01 21:20:25

标签: php mysql thread-safety

如果我有一个在MySQL连接上调用INSERT,UPDATE,DELETE等的php脚本,并且该脚本在POST操作的不受控制的时间被调用,它是否总是“安全”(即不会导致损坏请求期间的表或冲突?

例如,如果在1秒的时间内有500个请求。

如果是这样,php / mysql如何实现这个目标?

如果没有,那么需要做些什么来保证“串行”访问或安全的同时访问?

6 个答案:

答案 0 :(得分:9)

MySQL使用锁定(MyISAM的表级或InnoDB的行级),它不允许2个进程(对脚本的2次调用)修改同一行。因此表格不会崩溃*,但MySQL可能无法在可重复的时间内处理请求数量,并且请求将等待。您应始终尽可能快地优化查询。

* MyISAM可能会在插入/更新密集型应用程序上崩溃,但它具有自动恢复功能。但请记住,在这样的应用程序中,InnoDB具有更好的性能

答案 1 :(得分:2)

  

它总是“安全”(即,在请求期间不会导致损坏的表或冲突)?

  

如果是这样,php / mysql如何实现这个目标?

表/行锁。

答案 2 :(得分:2)

MySQL对Isoloation使用锁定,对原子性使用transactions。交易需要InnoDB或BDB。 InnoDB支持完整的ACID支持。

锁和事务的组合将解决您的并发问题。

默认情况下,MySQL有implicit transactions

绝对了解这些功能,看看它们是否符合要求。 MyISAM使用表锁定,而InnoDB提供行级锁定,因此可以比另一个更好地满足您的需求。

答案 3 :(得分:1)

通常,数据库对于冲突是可靠的,但是必须完成或丢弃必须完成的重要操作。想想银行账户上的现金存款。

为了实现这一结果,您可能对使用交易感兴趣:

PHP + MySQL transactions examples

答案 4 :(得分:0)

使用交易...请参阅this

答案 5 :(得分:0)

我认为您正在寻找的术语是事务和隔离级别。如果根据您的要求设置,您不必担心碰撞。这是how it works的教程。