如果我有一个在MySQL连接上调用INSERT,UPDATE,DELETE等的php脚本,并且该脚本在POST操作的不受控制的时间被调用,它是否总是“安全”(即不会导致损坏请求期间的表或冲突?
例如,如果在1秒的时间内有500个请求。
如果是这样,php / mysql如何实现这个目标?
如果没有,那么需要做些什么来保证“串行”访问或安全的同时访问?
答案 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)
通常,数据库对于冲突是可靠的,但是必须完成或丢弃必须完成的重要操作。想想银行账户上的现金存款。
为了实现这一结果,您可能对使用交易感兴趣:
答案 4 :(得分:0)
使用交易...请参阅this
答案 5 :(得分:0)
我认为您正在寻找的术语是事务和隔离级别。如果根据您的要求设置,您不必担心碰撞。这是how it works的教程。