如何在运行sql查询之前检查受影响的行?

时间:2014-11-04 21:01:18

标签: mysql sql

考虑一个包含一些行的表。 通过php,我创建了一个SQL查询,例如" DELETE *来自my_table"。 如何在运行sql查询之前识别受影响的行。换句话说,我想在sql查询之后和运行之前获得受影响的行列表。

总而言之,我想在运行SQL不可逆查询之前检查一些事情。

最好的方面。

5 个答案:

答案 0 :(得分:4)

您可以使用与SELECT使用的JOINWHERE条件相同的DELETEDELETE条件执行SELECT查询。这将返回已删除的行。

如果您想要完美的安全性,则需要在访问表的所有应用程序中使用事务。正在执行SELECT的过程应在同一事务中执行DELETE。否则,另一个进程可能会在DELETE和{{1}}之间向表中添加行,如果符合条件,则可能会删除这些行。

如果您只是想通过眼球检查结果来验证{{1}}查询的逻辑,那么这可能有点过分。

答案 1 :(得分:2)

假设您有一个DELETE查询,如:

DELETE FROM my_table WHERE foo='bar'

要查看将删除多少条记录,您可以先运行:

SELECT count(*) from my_table where foo='bar'

该查询的结果将是满足相同条件的记录数。

答案 2 :(得分:1)

您可以使用SELECT然后使用mysqli_affected_rows来获取要删除的行数。 如果您想要来自行的数据,那么您可以使用SELECT获取它。

答案 3 :(得分:1)

在陈述之前添加解释

答案 4 :(得分:0)

1)创建一个分析行的函数:

function checkRows($table){
    $query = 'SELECT * FROM ' . $table;

    // execute SELECT query
    // get the result
    // using for loop, set $delete boolean based on whether to delete or not

    return $delete;
}

2)创建一个删除内容的函数:

function deleteFromTable($table){
    $query = 'DELETE FROM ' . $table;

    // execute DELETE query
}

3)创建条件调用:

$table = 'SomeTable';
$validDelete = checkRows($table);

if($validDelete){
    deleteFromTable($table);
}

这将允许您在删除之前执行记录验证。