From a181d3cd28625b9654fc3b7bea44e9f9ce463929 Mon Sep 17 00:00:00 2001 From: adela Date: Wed, 18 Mar 2026 13:53:18 +0100 Subject: [PATCH 1/2] add truncate vs delete blog --- content/blog/truncate-vs-delete-sql.md | 155 ++++++++++++++++++ .../blog/truncate-vs-delete-sql/banner.webp | Bin 0 -> 48048 bytes 2 files changed, 155 insertions(+) create mode 100644 content/blog/truncate-vs-delete-sql.md create mode 100644 public/content/blog/truncate-vs-delete-sql/banner.webp diff --git a/content/blog/truncate-vs-delete-sql.md b/content/blog/truncate-vs-delete-sql.md new file mode 100644 index 00000000..fd12f06b --- /dev/null +++ b/content/blog/truncate-vs-delete-sql.md @@ -0,0 +1,155 @@ +--- +title: 'TRUNCATE vs DELETE in SQL: Differences Across PostgreSQL, MySQL, and SQL Server' +author: Adela +updated_at: 2026/03/16 09:00 +feature_image: /content/blog/truncate-vs-delete-sql/banner.webp +tags: Explanation +description: 'TRUNCATE and DELETE both remove rows, but they differ in speed, rollback behavior, and locking. Compare how they work in PostgreSQL, MySQL, and SQL Server.' +--- + +TRUNCATE and DELETE both remove rows from a table, but they work nothing alike under the hood. TRUNCATE drops all rows at once by deallocating the data pages. DELETE removes rows one at a time and logs each removal individually. This difference makes TRUNCATE faster on large tables, but it also means they behave differently with transactions, triggers, and foreign keys. + +The bigger surprise: TRUNCATE is not even the same operation across databases. PostgreSQL treats it as a transactional command you can roll back. MySQL treats it as a DDL statement that commits immediately and cannot be undone. If you switch databases without knowing this, you will lose data. + +## TRUNCATE vs DELETE at a glance + +| | TRUNCATE | DELETE | +|---|---|---| +| Operation type | [DDL](/blog/what-is-ddl-and-dml-in-sql-database/) | [DML](/blog/what-is-ddl-and-dml-in-sql-database/) | +| Removes | All rows (no WHERE clause) | Selected rows (WHERE clause supported) | +| Speed on large tables | Fast (deallocates pages) | Slow (row-by-row logging) | +| Fires row-level triggers | No | Yes | +| Resets auto-increment / identity | Yes | No | +| Returns row count | No | Yes | +| Can be rolled back in PostgreSQL | Yes | Yes | +| Can be rolled back in MySQL | No (implicit commit) | Yes | +| Can be rolled back in SQL Server | Yes (within a transaction) | Yes | + +The speed difference is not marginal. DELETE on a 47-million-row table scans every row and writes a WAL entry for each one. That can take hours. TRUNCATE on the same table finishes in under a second because it discards the data files without touching individual rows. + +## TRUNCATE in PostgreSQL + +PostgreSQL is the most flexible of the three. It wraps TRUNCATE inside transactions, just like any other command, so you can truncate a table and roll it back if something goes wrong. + +```sql +BEGIN; +TRUNCATE employees; +-- Changed your mind? +ROLLBACK; +-- All rows are still there. +``` + +You also get control over auto-increment sequences: + +```sql +-- Reset the sequence back to 1 +TRUNCATE orders RESTART IDENTITY; + +-- Keep the current sequence value +TRUNCATE orders CONTINUE IDENTITY; +``` + +Both the row removal and the sequence reset are transactional. Roll back, and the sequence returns to its previous value too. This is unusual. Even PostgreSQL's own `ALTER SEQUENCE RESTART` is not transactional outside of a TRUNCATE context. + +For tables with foreign key references, PostgreSQL blocks TRUNCATE unless you add `CASCADE`: + +```sql +-- This fails if other tables reference "orders" +TRUNCATE orders; + +-- This truncates "orders" and any tables that reference it +TRUNCATE orders CASCADE; +``` + +Be careful with CASCADE. It silently empties every table linked by a foreign key chain, and on a schema with 30+ tables, that chain can reach tables you forgot were connected. + +## TRUNCATE in MySQL + +Different story. MySQL's TRUNCATE is a DDL statement that [causes an implicit commit](https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html). Cannot be rolled back. + +```sql +START TRANSACTION; +TRUNCATE employees; +-- The TRUNCATE already committed. ROLLBACK does nothing here. +ROLLBACK; +-- The table is empty. +``` + +This catches people who move from PostgreSQL to MySQL. They write TRUNCATE inside a transaction block expecting safety, and the data is gone the moment the statement runs. No warning, no error. The ROLLBACK succeeds silently and does nothing. + +MySQL always resets AUTO_INCREMENT to 1 on TRUNCATE. No option to keep the current value, unlike PostgreSQL's `CONTINUE IDENTITY`. + +Foreign keys are also handled differently. MySQL blocks TRUNCATE if the table is referenced by a foreign key from another table, even if the referencing table has zero rows. The workaround: + +```sql +SET FOREIGN_KEY_CHECKS = 0; +TRUNCATE orders; +SET FOREIGN_KEY_CHECKS = 1; +``` + +Disabling foreign key checks is a blunt tool. If another session inserts rows referencing the truncated table while checks are off, you get orphaned records with no constraint violation. MySQL will not tell you about them. + +## TRUNCATE in SQL Server + +SQL Server sits between the two. It allows TRUNCATE inside explicit transactions (like PostgreSQL) but lacks the sequence control options. + +```sql +BEGIN TRANSACTION; +TRUNCATE TABLE employees; +-- Safe to roll back +ROLLBACK; +``` + +The IDENTITY seed always resets. No equivalent to PostgreSQL's `CONTINUE IDENTITY`. + +SQL Server is the strictest about foreign keys. It blocks TRUNCATE on any table referenced by a FOREIGN KEY constraint, even if `ON DELETE CASCADE` is defined. No CASCADE option for TRUNCATE, no `FOREIGN_KEY_CHECKS` toggle. Your only choices are DELETE or dropping the constraint entirely. + +One edge case worth knowing: TRUNCATE also fails on tables that participate in indexed views or are published through transactional replication. + +## When to use TRUNCATE vs DELETE + +Use TRUNCATE for bulk cleanup: emptying staging tables between ETL loads, wiping test data, resetting a table after a failed migration. If the table has 10 million rows and you need all of them gone, TRUNCATE is the only practical option. + +Use DELETE for everything else. You need a WHERE clause, you need triggers to fire, you need to know exactly how many rows were removed. DELETE is slower but it plays by the rules. + +One recommendation: if you are writing application code that removes rows, always use DELETE. TRUNCATE belongs in migration scripts, maintenance jobs, and CI pipelines. Putting TRUNCATE in application logic is asking for trouble when someone adds a foreign key to that table six months later. + +## TRUNCATE and foreign keys + +All three databases block TRUNCATE when another table holds a foreign key reference. The workarounds differ, and none of them are safe to run blindly. + +| Database | Workaround | +|---|---| +| PostgreSQL | `TRUNCATE table CASCADE` (truncates referencing tables too) | +| MySQL | `SET FOREIGN_KEY_CHECKS = 0` before TRUNCATE, re-enable after | +| SQL Server | Drop the foreign key constraint, TRUNCATE, recreate the constraint | + +CASCADE can wipe tables you did not intend. Disabling foreign key checks opens a window for orphaned rows. Dropping and recreating constraints on a large schema is slow and error-prone. + +If the table has foreign key dependencies, just use DELETE. Slower, but it respects constraints without workarounds and without the risk of silently destroying related data. + +## How Bytebase prevents accidental TRUNCATE + +Running TRUNCATE on a production table by accident takes seconds. Recovering from it takes hours if you have backups, and is impossible if you don't. + +[Bytebase](/) provides [SQL review rules](https://www.bytebase.com/docs/sql-review/review-rules/) that flag or block TRUNCATE statements before they reach production. You can set policies like prohibiting TRUNCATE on production environments, requiring approval for DDL statements, or flagging CASCADE operations that touch multiple tables. + +These rules run automatically when a developer submits a SQL change through Bytebase, catching dangerous statements during review rather than after execution. See [The SQL Review Tool for Developers](/blog/sql-review-tool-for-devs/) for how this fits into a team workflow. + +## FAQ + +**Is TRUNCATE faster than DELETE?** + +Yes. TRUNCATE deallocates data pages without scanning or logging individual rows. On tables with millions of rows, TRUNCATE completes in under a second while DELETE can take minutes or hours. + +**Does TRUNCATE reset AUTO_INCREMENT?** + +Yes in all three databases. PostgreSQL gives you a choice with `RESTART IDENTITY` (reset) or `CONTINUE IDENTITY` (keep current value). MySQL and SQL Server always reset to the starting value. + +**Can I TRUNCATE a table with foreign keys?** + +Not directly. All three databases block TRUNCATE when another table references the target with a foreign key. PostgreSQL supports `CASCADE` to truncate referencing tables. MySQL requires disabling `FOREIGN_KEY_CHECKS`. SQL Server requires dropping the constraint first. + +**Is TRUNCATE a DDL or DML statement?** + +TRUNCATE is classified as [DDL (Data Definition Language)](/blog/what-is-ddl-and-dml-in-sql-database/). DELETE is DML. This classification explains why MySQL's TRUNCATE triggers an implicit commit: MySQL auto-commits all DDL statements. PostgreSQL and SQL Server handle it differently by allowing DDL inside transactions. For more on how [PostgreSQL and MySQL handle DDL transactions differently](/blog/postgres-vs-mysql-ddl-transaction/), see our detailed comparison. diff --git a/public/content/blog/truncate-vs-delete-sql/banner.webp b/public/content/blog/truncate-vs-delete-sql/banner.webp new file mode 100644 index 0000000000000000000000000000000000000000..2c6c3578d239bfac373b37b2eef73826ed50a554 GIT binary patch literal 48048 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
Xld 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 Date: Wed, 18 Mar 2026 06:29:51 -0700 Subject: [PATCH 2/2] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- content/blog/truncate-vs-delete-sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/truncate-vs-delete-sql.md b/content/blog/truncate-vs-delete-sql.md index fd12f06b..3af4fa23 100644 --- a/content/blog/truncate-vs-delete-sql.md +++ b/content/blog/truncate-vs-delete-sql.md @@ -65,7 +65,7 @@ Be careful with CASCADE. It silently empties every table linked by a foreign key ## TRUNCATE in MySQL -Different story. MySQL's TRUNCATE is a DDL statement that [causes an implicit commit](https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html). Cannot be rolled back. +Different story. MySQL's TRUNCATE is a DDL statement that [causes an implicit commit](https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html), so it cannot be rolled back. ```sql START TRANSACTION;