Mysql 如何从表中删除,但防止其变为空?
我有一个包含两列的表:id(唯一键)和data 我需要从该表中删除id等于某个值的行。显而易见的疑问: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
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:如果由于某些原因,触发器不是解决方案呢?