比方说,我有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
子句?
答案 0 :(得分:2)
脚本2将不等待脚本1完成。在编程中称为竞赛条件。
要处理MySQL中的这种竞争情况,可以在another_table.table_user_id
上添加foreign key来引用users.user_id
。如果在任何给定时间another_table
表中不存在user_id
,则无法插入users
。