首页 > 解决方案 > 防止不相关的mysql数据

问题描述

假设我有 2 个 php 脚本,它们从不同的页面(不同的 url)运行。看一看:

脚本 1:

<?php
// 15:43:00 - Connect to database.
// 15:43:00 - Mysql query: "SELECT user_data FROM users WHERE user_id = 5"
// 15:43:00 - sleep(5)
// 15:43:05 - Mysql query: "INSERT INTO another_table (table_user_data, table_user_id) VALUES ($user_data, 5)"

脚本 2:

<?php
// 15:43:03 - Connect to database.
// 15:43:03 - Mysql query: "DELETE FROM users WHERE user_id = 5"

我希望你看到时间。所以,我的问题是:

脚本 2 将等到脚本 1 成功执行,或者它将运行查询并删除用户?

如果它将删除用户,那么我应该如何将该行插入到表“another_table”中,因为 mysqlINSERT语法不接受WHERE子句?

标签: phpmysqldatabase

解决方案


脚本 2 不会等待脚本 1 完成。它在编程中被称为竞争条件。

在 MySQL 中处理这种竞争条件,你可以添加一个外键another_table.table_user_id引用users.user_id。在这种情况下,如果在任何给定时间表中都不存在,则插入another_table将失败。user_idusers


推荐阅读