有没有这样的东西:
TEST DELETE FROM user WHERE somekey = 45;
这可能会返回任何错误,例如某个键不存在,或某些约束违反或任何东西,并报告有多少行将受到影响,但不执行查询?
我知道您可以很容易地将select查询中的任何查询转换为在任何行中没有写入或删除效果的查询,但这可能会导致错误,如果您想要测试和调试许多查询,这是不太实际的。
发布于 2018-06-08 18:52:58
我意识到这是一个有点老生常谈的问题,但为了完整性...
如果其目的是在不返回任何行的情况下找到查询处理时间(我经常需要这样做,我想知道我正在使用的一段代码将花费多长时间,而不返回我不感兴趣看到的几百万行),那么黑洞引擎可能非常有用:
https://dev.mysql.com/doc/refman/8.0/en/blackhole-storage-engine.html
例如,假设我有两个表,t1 & t2,有数百万行,我将它们连接在一起。我想在图形用户界面(SQLYog或mysql工作台等)中检查这可能需要多长时间,而不返回数以百万计的行,这将消耗内存,并可能需要图形用户界面处理和显示的时间。我使用黑洞引擎将行“转储”到任何地方。例如:
CREATE TABLE tBH (a TINYINT) ENGINE = BLACKHOLE;
SELECT NOW(); -- Show start time
INSERT tBH
SELECT 1 FROM t1
LEFT JOIN t2 ON t1.key1 = t2.key1;
SELECT NOW(); -- Show end time
请注意,由于我只是在寻找执行时间,所以我不会费心返回所有列(IE带有"*"),而只返回一个占位符(在本例中为“1”)。
发布于 2010-03-12 23:16:06
我所知道的唯一一件事就是将它包装在一个总是回滚的事务中:
BEGIN TRANSACTION
DELETE FROM user WHERE somekey = 45;
ROLLBACK TRANSACTION
确保执行整个代码块,而不仅仅是delete语句。此外,不要在任何生产环境或任何您不能丢失数据的系统上运行此命令。
发布于 2018-12-11 03:56:19
从MySQL 5.6开始,EXPLAIN
关键字可用于SELECT
、DELETE
、INSERT
、REPLACE
和UPDATE
语句。
如果您的查询有语法错误,那么它仍然会失败,但是如果成功,您将只看到EXPLAIN的结果,并且查询不会进行任何更改。
这比进行模式更改、使用临时表或中止事务要简单得多,因为您只需在现有查询前面插入"EXPLAIN“。
https://stackoverflow.com/questions/2433633
复制相似问题