防止不相关的mysql数据

时间:2019-09-21 03:51:10

标签: php mysql database

比方说,我有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”中,因为mysql INSERT语法不接受WHERE子句?

1 个答案:

答案 0 :(得分:2)

脚本2将不等待脚本1完成。在编程中称为竞赛条件。

要处理MySQL中的这种竞争情况,可以在another_table.table_user_id上添加foreign key来引用users.user_id。如果在任何给定时间another_table表中不存在user_id,则无法插入users