我正在做一个任意的 DELETE 或 SELECT 查询,我知道这应该只影响或返回一行。如何确保查询不执行,并且当多于一行匹配时我得到一些信号表明出现问题?
使用 LIMIT 和 ORDERBY 允许操作继续,而不是硬中止。这意味着多个对象可能会被删除而没有机会恢复。
优选地,任何信号结果都将不同于具有零匹配。
我正在做一个任意的 DELETE 或 SELECT 查询,我知道这应该只影响或返回一行。如何确保查询不执行,并且当多于一行匹配时我得到一些信号表明出现问题?
使用 LIMIT 和 ORDERBY 允许操作继续,而不是硬中止。这意味着多个对象可能会被删除而没有机会恢复。
优选地,任何信号结果都将不同于具有零匹配。
正如 Arkhena 所提到的,使用标量子查询来确定要访问的行:
如果子查询返回多个 ID,则查询失败。这需要一些唯一的密钥(这里:ID)。
如果您不想从查询中得到错误,您可以使用 CTE 作为过滤器,然后检查 CTE 中的行数:
仅当实际删除了一行时,此语句才会返回 ID 值。