Important
The SingleStore 9.1 release candidate (RC) gives you the opportunity to preview, evaluate, and provide feedback on new and upcoming features prior to their general availability. In the interim, SingleStore 9.0 is recommended for production workloads, which can later be upgraded to SingleStore 9.1.
DELETE
On this page
DELETE is a DML statement that deletes rows in a table.
Syntax
DELETE FROM tbl_name
[WHERE expr]
[LIMIT row_count]
DELETE tbl_name FROM table_references
[WHERE expr]
[LIMIT row_count]For information on using the RETURNING clause refer DELETE .
Arguments
table_
One or more tables to reference during the delete operation.table_.
tbl_
Table from which rows will be deleted.
where_
One or more expression that evaluates to true for each row to be deleted.
row_
The maximum number of rows that can be deleted.
Remarks
-
The
DELETEstatement deletes rows fromtbl_and returns the number of deleted rows.name -
Although
DELETEsupports referencing multiple tables using either joins or subqueries, SingleStore only supports deleting from one table in aDELETEstatement. -
If the
maximum_limit has been reached,table_ memory DELETEqueries can still be executed to remove data from the table, but largeDELETEqueries may fail if themaximum_limit has been reached.memory -
Caution should be taken as
DELETEqueries allocate extra memory to mark rows as deleted.For rowstore tables, this equates to roughly 40 + 8*number_ of_ indexes bytes per deleted row. For columnstore tables, the memory usage will be lower because of how rows are marked to be deleted (roughly num_ rows_ in_ table/8 bytes if you delete a row in every segment file in the table). -
Table memory can be freed when the
DELETEcommand is run.For information on when/how much table memory is freed when this command is run, see Memory Management. -
If the table is narrow, such as containing a small number of int columns,
DELETEqueries will show up as a relatively large spike in memory usage compared to the size of the table. -
The memory for a deleted row is reclaimed after the transaction commits and the memory is freed asynchronously by the garbage collector.
-
If you need to delete all records from a large table, use
TRUNCATEinstead.TRUNCATEdoes not incur the memory penalty ofDELETE; however, if you do need to runDELETEover a large number of rows in a rowstore table, performDELETEs in smaller batches usingLIMITto minimize the additional memory usage. -
This command must be run on the master aggregator or a child aggregator node (see Cluster Management Commands).
-
Transactions that span more than one database are not supported.
An attempt to write to multiple databases within a single transaction fails with the following error: Feature 'Cross-database transactions is not supported by SingleStore. -
For performance limitations refer to UPDATE
-
Refer to the Permission Matrix for the required permissions.
Example
DELETE FROM mytbl WHERE seq = 1;DELETE FROM mytable LIMIT 100000;DELETE FROM mytblWHERE id IN (SELECT id FROM myother) LIMIT 10;DELETE t_rec FROM t_rec JOIN t_invalidWHERE t_rec.id = t_invalid.id;DELETE t_rec FROM t_rec JOIN(SELECT id FROM t_rec ORDER BY score LIMIT 10)tempWHERE t_rec.id=temp.id;DELETE b FROM a, b, cWHERE a.name = b.name OR b.name = c.name;DELETE x FROM looooooooooongName as x, yWHERE x.id = y.id;
Last modified: February 18, 2026