现在我有以下我在PHP中调用的SQL语句:
SELECT * FROM activity WHERE id=(
SELECT activity_id FROM session_notifications
WHERE session_id='{$session}');
这将从session_notification表中引用的活动中提取表数据。都好。现在,有没有一种简单的方法可以做到这一点,但是在同一个语句中删除通过检查session_notifications返回的所有行?
**编辑:为了更清楚,我不想删除活动,因为我需要这些信息。我想删除遇到的session_notifications中的行。为什么?因为我之后不希望添加任何东西。但是,我可能没问题,因为SQL表是线程安全的,是吗?
答案 0 :(得分:1)
使用一个原子语句无法做到这一点。改为使用交易:
BEGIN;
SELECT …;
DELETE …;
COMMIT;
建议BTW使用prepared statements,而不是像WHERE session_id='{$session}'
那样引入SQL注入。
答案 1 :(得分:1)
如果您想确保删除select中显示的记录,则必须使用交易。
START TRANSACTION;
SELECT * FROM activity WHERE id IN (
SELECT activity_id FROM session_notifications
WHERE session_id='{$session}');
DELETE FROM activity WHERE id IN (
SELECT activity_id FROM session_notifications
WHERE session_id='{$session}');
COMMIT;