我认为有两种方式。首先,如果有可能无法插入或更新,我会先检查表的条件,看看是否有可能。如果您需要原子操作,您可以在此过程中锁定表,以确保另一个进程在您检查表和进行更新之间不会更改表。如果您需要高水平的并发性,这可能会减慢速度。
或者,如果您使用事务引擎(InnoDB 支持事务,MyISAM 不支持),您可以启动事务,然后监控更新和插入的返回值。
START TRANSACTION
..然后检查您的操作结果。从 php 文档:
对于 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回结果集的语句,mysql_query() 成功时返回资源,错误时返回 FALSE。
对于其他类型的 SQL 语句,INSERT、UPDATE、DELETE、DROP 等,mysql_query() 在成功时返回 TRUE,在错误时返回 FALSE。
返回的结果资源应该传递给 mysql_fetch_array() 和其他处理结果表的函数,以访问返回的数据。
使用 mysql_num_rows() 找出 SELECT 语句返回了多少行,或使用 mysql_affected_rows() 找出有多少行受到 DELETE、INSERT、REPLACE 或 UPDATE 语句的影响。
如果您不成功,您可以回滚您的更改:
ROLLBACK
最后,在不了解您的应用程序的情况下,我无法确定,但您可能能够设计数据集和应用程序,这样您一开始就不会陷入这种情况,这样会更快。事务和锁定表都很慢,所以除非有必要,否则我会避免使用它们。