Delete test orders in Magento
14 Comments 23rd OCT 2008 | Posted by Tomislav Bilic in Magento

You got a Magento project to develop, you created a Magento theme, you placed initial products and categories and you also placed some test orders to see if Shipping and Payment methods work as expected. Everything seems to be cool and the client wishes to launch the site. You launch it. When you enter the administration for the first time after the launch, you will see all your test orders there. You know those should be deleted. But how?
If you try to delete orders in the backend, you will find out that you can only set the status to “cancelled” and the order is still there. Unfortunately, Magento doesn’t enable us to delete those via administration, so you will not see any “Delete order” button. This can be quite frustrating both to developers and the merchants. People coming from an SAP world find the inability to delete to have some merit but there should be a status that removes the sales count from the reports i.e. sales, inventory, etc.
So, what to do?
You need to go to MySQL admin client and run this query:
SET FOREIGN_KEY_CHECKS=0; TRUNCATE `sales_order`; TRUNCATE `sales_order_datetime`; TRUNCATE `sales_order_decimal`; TRUNCATE `sales_order_entity`; TRUNCATE `sales_order_entity_datetime`; TRUNCATE `sales_order_entity_decimal`; TRUNCATE `sales_order_entity_int`; TRUNCATE `sales_order_entity_text`; TRUNCATE `sales_order_entity_varchar`; TRUNCATE `sales_order_int`; TRUNCATE `sales_order_text`; TRUNCATE `sales_order_varchar`; TRUNCATE `sales_flat_quote`; TRUNCATE `sales_flat_quote_address`; TRUNCATE `sales_flat_quote_address_item`; TRUNCATE `sales_flat_quote_item`; TRUNCATE `sales_flat_quote_item_option`; TRUNCATE `sales_flat_order_item`; TRUNCATE `sendfriend_log`; TRUNCATE `tag`; TRUNCATE `tag_relation`; TRUNCATE `tag_summary`; TRUNCATE `wishlist`; TRUNCATE `log_quote`; TRUNCATE `report_event`; ALTER TABLE `sales_order` AUTO_INCREMENT=1; ALTER TABLE `sales_order_datetime` AUTO_INCREMENT=1; ALTER TABLE `sales_order_decimal` AUTO_INCREMENT=1; ALTER TABLE `sales_order_entity` AUTO_INCREMENT=1; ALTER TABLE `sales_order_entity_datetime` AUTO_INCREMENT=1; ALTER TABLE `sales_order_entity_decimal` AUTO_INCREMENT=1; ALTER TABLE `sales_order_entity_int` AUTO_INCREMENT=1; ALTER TABLE `sales_order_entity_text` AUTO_INCREMENT=1; ALTER TABLE `sales_order_entity_varchar` AUTO_INCREMENT=1; ALTER TABLE `sales_order_int` AUTO_INCREMENT=1; ALTER TABLE `sales_order_text` AUTO_INCREMENT=1; ALTER TABLE `sales_order_varchar` AUTO_INCREMENT=1; ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1; ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1; ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1; ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1; ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1; ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1; ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1; ALTER TABLE `tag` AUTO_INCREMENT=1; ALTER TABLE `tag_relation` AUTO_INCREMENT=1; ALTER TABLE `tag_summary` AUTO_INCREMENT=1; ALTER TABLE `wishlist` AUTO_INCREMENT=1; ALTER TABLE `log_quote` AUTO_INCREMENT=1; ALTER TABLE `report_event` AUTO_INCREMENT=1; -- reset customers TRUNCATE `customer_address_entity`; TRUNCATE `customer_address_entity_datetime`; TRUNCATE `customer_address_entity_decimal`; TRUNCATE `customer_address_entity_int`; TRUNCATE `customer_address_entity_text`; TRUNCATE `customer_address_entity_varchar`; TRUNCATE `customer_entity`; TRUNCATE `customer_entity_datetime`; TRUNCATE `customer_entity_decimal`; TRUNCATE `customer_entity_int`; TRUNCATE `customer_entity_text`; TRUNCATE `customer_entity_varchar`; TRUNCATE `log_customer`; TRUNCATE `log_visitor`; TRUNCATE `log_visitor_info`; ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1; ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1; ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1; ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1; ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1; ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1; ALTER TABLE `customer_entity` AUTO_INCREMENT=1; ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1; ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1; ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1; ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1; ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1; ALTER TABLE `log_customer` AUTO_INCREMENT=1; ALTER TABLE `log_visitor` AUTO_INCREMENT=1; ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1; -- Reset all ID counters TRUNCATE `eav_entity_store`; ALTER TABLE `eav_entity_store` AUTO_INCREMENT=1; SET FOREIGN_KEY_CHECKS=1;
After you have it executed, the test orders will not be in the database any more. Keep in mind that this will delete ALL orders, in the database. So, you should execute this queries immediately after launch.

















October 23rd, 2008 at 13:43
Great post.
You save me some time with my future task.
Thanks.
October 24th, 2008 at 13:45
Great post.
Would it be possible to delete specific orders? Say for instance, if your store had been running for a little while with the original test orders still in place and you only found the above snippet now?
Cheers,
Matt
October 24th, 2008 at 13:48
Hello Matthew,
That was the point of this post. It is currently impossible to do it with Magento administration. You would have to go to MySQL client and delete relevant entities manually starting with sales_order* tables.
October 27th, 2008 at 19:10
Hey Tomislav Bilic,
In the Dashboard, if u see Lifetime Sales, this show the value of urs sales yet =//
November 1st, 2008 at 13:50
Works like a charm. Thanks for the post!
Paddy
November 1st, 2008 at 16:32
The one attribute this code doesn’t seem to address is Shopping Cart Reports.
After running this code, if you visit backend and go to REPORTS>SHOPPING CART>PRODUCTS IN CARTS, you will see no items listed, but the counter will still list the number of test orders you’ve placed in carts.
I’d suggest the fix myself, but am unsure which table or attribute controls this value – should just be a matter of adding two lines – one to truncate, and another to auto-increment.
November 11th, 2008 at 23:10
Correct me if I’m wrong, but don’t you want to add these tables too?
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE `sales_order_tax`;
TRUNCATE `sales_flat_quote_shipping_rate`;
TRUNCATE `sales_flat_quote_payment`;
TRUNCATE `log_url_info`;
TRUNCATE `log_url`;
ALTER TABLE `sales_order_tax` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1;
ALTER TABLE `log_url_info` AUTO_INCREMENT=1;
SET FOREIGN_KEY_CHECKS=1;
November 11th, 2008 at 23:19
Oh, and BTW, don’t worry about the PRODUCTS IN CARTS tally being wrong. It seems to be unrelated.
It looks like the wrong reporting of the total in REPORTS>SHOPPING CART>PRODUCTS IN CARTS is an issue with the current version of Magento (at least as of 1.1.6), unrelated to the above queries. I think they may have grabbed the total from the wrong table(s) in the first place. Someone could test in a fresh install with a bunch of products loaded, but no items ever added to carts.
This was pointed out in the Magento Forums, and from my research in code and DB queries, it seems to be the case.
See:
http://www.magentocommerce.com/bug-tracking/issue?issue=3899
November 17th, 2008 at 2:06
Hey there Tomislav!
Great post here, very appreciated on behalf of the community!
We did a bit further modification by the following:
+ resetting all dashboard data
+ setting prefix’s for the following numbers: orders, invoices, shipments, and credit memo’s
Feel free to check it out here: http://eliasinteractive.com/blog/magento-ecommerce-how-to-reset-all-test-order-information-and-set-unique-prefix-for-orders-invoices-shipments-and-credit-memos/
Thanks again for your contributions!
Lee Taylor / Elias Interactive
December 1st, 2008 at 14:36
Thanks Tomislav!!
It worked perfectly
Cheers!
January 24th, 2009 at 16:08
Hi Tomislav,
Thoroughly useful script. Exactly what I was looking for whilst developing out my Magento shop. A real time saver…
Cheers!
June 3rd, 2009 at 22:27
Is this SQL Query still valid for Magento? new Log_Visitor tables got added in version 1.3.1.1, so I don’t this this query will still do it all 100%, it certainly removes the test orders in 1.3.2.2. Just don’t want it missing anything.
Please take a little look.
Thanks,
Rob.
June 17th, 2009 at 7:44
@Robert: We surely will, just when we manage to catch some free time. Hope you understand. Few days passed since your question and I was wondering if you managed to solve the issue already. If you did, feel free to post the update query to us and we’ll publish it. Thanks.
June 24th, 2009 at 16:34
trouble is that quite often post launch there are multiple test orders created, these then are un deletable