Mysql 如何从表中删除,但防止其变为空?

Mysql 如何从表中删除,但防止其变为空?,mysql,sql,database,Mysql,Sql,Database,我有一个包含两列的表:id(唯一键)和data 我需要从该表中删除id等于某个值的行。显而易见的疑问: DELETE FROM table WHERE id = value 但是,我需要防止表变为空(即没有行)。换句话说,我需要删除id=value的行,前提是删除后表不会变为空 我需要在一个单独的查询中原子化地完成它,我还需要通过这个查询的结果知道是否有东西被实际删除了 可能吗 谢谢。看起来这个很有效: START TRANSACTION; DELETE FROM table WHERE id

我有一个包含两列的表:id(唯一键)和data

我需要从该表中删除id等于某个值的行。显而易见的疑问:

DELETE FROM table WHERE id = value
但是,我需要防止表变为空(即没有行)。换句话说,我需要删除id=value的行,前提是删除后表不会变为空

我需要在一个单独的查询中原子化地完成它,我还需要通过这个查询的结果知道是否有东西被实际删除了

可能吗


谢谢。

看起来这个很有效:

START TRANSACTION;
DELETE FROM table WHERE id = ... AND (SELECT * FROM (SELECT COUNT(*) FROM table) Temp) > 1;
SELECT ROW_COUNT();

无论如何,它可能对某些人有用。

或者,可以使用存储的例程

CREATE PROCEDURE delete\u keep\u one(pID INT)
开始
声明cnt INT;
启动交易;
从t1中删除,其中id=pID;
从t1中选择COUNT(*)进入cnt;
如果cnt=0,则
回降;
其他的
犯罪
如果结束;
结束;
调用delete\u keep\u one(200);
因此,只有当
COUNT(*)
返回的值大于0时,才会发生
COMMIT


如果您需要在另一个事务中调用
,请取出
提交
,或添加一个可以选择提交的参数。

您可以使用简单连接:

DELETE tbl.* 
FROM tbl 
JOIN tbl tbl1 ON tbl.id <> tbl1.id WHERE tbl.id = 1; 
删除tbl.*
来自tbl
在tbl.id tbl1.id上加入tbl tbl1,其中tbl.id=1;
在这种情况下,已删除的记录只存在一条具有不同
id


尝试使用触发器以确保表不会变空。@jarlh:如果由于某些原因,触发器不是解决方案呢?