DCN*_*YAM 38
我唯一知道的是将它包装在一个总是回滚的事务中:
BEGIN TRANSACTION
DELETE FROM user WHERE somekey = 45;
ROLLBACK TRANSACTION
Run Code Online (Sandbox Code Playgroud)
确保执行整个块而不仅仅是delete语句.此外,请勿在任何生产环境或任何您无法承受丢失数据的系统上运行此操作.
在MySQL中使用它
START TRANSACTION;
QUERY;
Run Code Online (Sandbox Code Playgroud)
使用";"很重要 因为如果你不这样做,那就不行了.例如
START TRANSACTION;
UPDATE tableX SET colX = valueA, colY = valueB WHERE id=1
Run Code Online (Sandbox Code Playgroud)
请参考http://dev.mysql.com/doc/refman/5.0/en/commit.html
在MySQL 5.6中,EXPLAIN关键字可与SELECT,DELETE,INSERT,REPLACE,和UPDATE语句。
如果查询有语法错误,它将仍然失败,但是,如果查询成功,您将仅看到EXPLAIN的结果,查询将不会进行任何更改。
这比进行模式更改,使用临时表或中止事务要简单得多,因为您要做的就是在现有查询之前插入“ EXPLAIN”。
更多信息:https : //dev.mysql.com/doc/refman/5.6/en/explain.html
我意识到这是一个有点老的问题,但为了完整性......
如果目的是在不返回任何行的情况下找到查询处理时间(我经常需要这个,我想知道我正在使用的一段代码需要多长时间而不返回我不感兴趣的几百万行)看到)那么 BLACKHOLE 引擎会非常有用:
https://dev.mysql.com/doc/refman/8.0/en/blackhole-storage-engine.html
例如,假设我有 2 个表 t1 和 t2,其中有数百万行,我将它们连接在一起。我想检查在 GUI(SQLYog 或 mysql 工作台等)中这可能需要多长时间,而不返回数百万行,这些行会耗尽内存,并且 GUI 可能需要时间来处理和显示。我使用黑洞引擎将行“转储”到任何地方。例如:
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
Run Code Online (Sandbox Code Playgroud)
请注意,由于我只是在寻找执行时间,因此我不会返回所有列(即带有“*”的IE),而只是返回一个占位符(在本例中为“1”)。
| 归档时间: |
|
| 查看次数: |
44719 次 |
| 最近记录: |