SQL Tipps & Tricks

Es wird empfohlen diese Statements nur mit den nötigen Vorkenntnissen auszuführen.
Die hier zur Verfügung gestellten Informationen wurden zum Zeitpunkt der Veröffentlichung dieses Artikels getestet, können sich zwischenzeitlich aber geändert haben. Die Durchführung dieses Tutorials geschieht auf eigene Gefahr! 

Lege Dir vor der Durchführung ein Backup an, sodass Du dieses im Zweifel zurückspielen kannst. Beachte, dass es sich hier um Anpassungen von Shopware handelt und der Inhalt dieses Tutorials daher nicht offiziell supportet wird!

Kataloge

Alle Produkte löschen

Mit dem folgenden Query kannst Du alle angelegten Produkte löschen und die Produkt Übersicht somit komplett leeren. 


delete pv.*, pt2.*, pt.*, psk.*, pr.*, pp2.*, pp.*, po.*, pm.*, pcfs.*, pcst.*, pcsap.*, pcs2.*, pcs.*, pct.*, pc.*, p.* from product p
left join product_category pc on p.id = pc.product_id 
left join product_category_tree pct on p.id = pct.product_id 
left join product_configurator_setting pcs on p.id = pcs.product_id 
left join product_cross_selling pcs2 on p.id = pcs2.product_id 
left join product_cross_selling_assigned_products pcsap on p.id = pcsap.product_id 
left join product_cross_selling_translation pcst on pcs2.id = pcst.product_cross_selling_id 
left join product_custom_field_set pcfs on p.id = pcfs.product_id 
left join product_media pm on p.id = pm.product_id 
left join product_option po on p.id = po.product_id 
left join product_price pp on p.id = pp.product_id 
left join product_property pp2 on p.id = pp2.product_id 
left join product_review pr on p.id = pr.product_id 
left join product_search_keyword psk on p.id = psk.product_id 
left join product_tag pt on p.id = pt.product_id 
left join product_translation pt2 on p.id = pt2.product_id 
left join product_visibility pv on p.id = pv.product_id;

Alle Eigenschaften löschen

Mit dem folgenden Query kannst Du alle Eigenschaften entfernen. 


delete pgt.*, pgot.*, pgo.*, pg.* from property_group pg 
join property_group_option pgo on pg.id = pgo.property_group_id 
join property_group_option_translation pgot on pgo.id = pgot.property_group_option_id 
join property_group_translation pgt on pg.id = pgt.property_group_id;

Alle Kundendaten löschen

Folgende SQL-Queries kannst Du anwenden, bevor Du mit Deinem Shop Live gehst. Beachte jedoch, dass Du diese nie in Deinem Live-Shop anwendest. Bestellungen mit Belegen bzw. Belege dürfen nicht gelöscht werden.

Mit dem folgenden Query kannst Du alle Kundendaten entfernen. 


delete cwp.*, cw.*, ct.*, cr.*, ca.*, c.* from customer c 
left join customer_address ca on c.id = ca.customer_id 
left join customer_recovery cr on c.id = cr.customer_id 
left join customer_tag ct ON c.id = ct.customer_id 
left join customer_wishlist cw on c.id = cw.customer_id 
left join customer_wishlist_product cwp on cw.id = cwp.customer_wishlist_id;

Alle Bestellungen löschen

Folgende SQL-Queries kannst Du anwenden, bevor Du mit Deinem Shop Live gehst. Beachte jedoch, dass Du diese nie in Deinem Live-Shop anwendest. Bestellungen mit Belegen bzw. Belege dürfen nicht gelöscht werden.

Mit dem folgenden Query kannst Du alle Bestellungen entfernen. 


delete ot2.*, ot.*, oli.*, odp.*, od.*, oc.*, oa.*, o.* from `order` o 
left join  order_address oa on o.id = oa.order_id 
left join  order_customer oc on o.id = oc.order_id 
left join  order_delivery od on o.id = od.order_id 
left join  order_delivery_position odp on od.id = odp.order_delivery_id 
left join  order_line_item oli on o.id = oli.order_id 
left join  order_tag ot on o.id = ot.order_id 
left join  order_transaction ot2 on o.id = ot2.order_id;

System / Einstellungen

Nicht standardmäßig vorhandene Erweiterungen deaktivieren

Mit den folgenden Queries kannst Du die Erweiterungen, die nicht bereits bei der Installation von Shopware vorhanden sind, deaktivieren. Dies ist besonders für das Debuggen von Fehlern sehr hilfreich, da Du so schnell den Einfluss von Erweiterungen ausschließen kannst.

Wenn Du ein eigenes Theme verwendest, das über eine Erweiterungen eingebunden ist, solltest Du vorab sicherstellen, dass das Theme keinem Verkaufskanal zugewiesen ist. Alternativ kann es zu Problemen beim Aufruf der entsprechenden Verkaufskanälen kommen.

Zunächst legen wir eine temporäre Backup-Tabelle an. In dieser Tabelle wird der aktuelle Stand der Erweiterung gesichert.


CREATE TABLE plugin_tmp LIKE plugin;
INSERT INTO `plugin_tmp` SELECT * FROM `plugin`;

Anschließend kannst Du die Erweiterungen deaktivieren


UPDATE `plugin` SET `active`= 0 WHERE (author <> 'shopware AG' AND author <> 'Shopware') OR (author IS NULL);

Der ursprüngliche Zustand der Erweiterungen lässt sich später wieder wie folgt herzustellen


UPDATE plugin AS p JOIN plugin_tmp AS pt ON p.id = pt.id SET p.active = pt.active;

Abschließend kannst Du noch die temporäre Sicherungstabelle wieder löschen


DROP TABLE plugin_tmp;

Datenbank-Kollation anpassen

Im Standard verwendet Showpare "utf8mb4_unicode_ci" als Kollation für die Tabellen.
Es kann jedoch vorkommen, dass die Kollation für einzelne Tabellen nicht (mehr) korrekt gesetzt ist.

Hierdurch kann es beim Vergleich von Zeichenfolgen inkompatibler Kollationen oder beim Versuch, Daten aus Spalten mit verschiedenen Kollationen auszuwählen, zu Fehlern kommen.
In den Log-Dateien ist dies an folgendem Eintrag (evtl. leicht abgewandelt) erkennbar:

SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE)

Mit folgendem Query kannst Du prüfen, ob in einer Tabelle eine falsche Kollation verwendet wird.
Füge dazu den Tabellen- und Datenbanknamen in das Query an den markierten Stellen ein.


SELECT table_schema, table_name, column_name, character_set_name, collation_name
 FROM information_schema.columns
 WHERE (collation_name = 'utf8mb4_unicode_ci' or collation_name = 'utf8_general_ci ') 
 and table_name = '' --Tabellenname einsetzen 
 and table_schema = '' --Datenbanknamen einsetzen
 ORDER BY table_schema, table_name,ordinal_position;

Das Update der Kollation ist mit einem der beiden folgenden Queries möglich.

Wir empfehlen, vor Änderungen in der Datenbank immer ein vollständiges Backup anzulegen.

 Update der gesamten Datenbank


ALTER DATABASE --Datenbanknamen einsetzen CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

Update einer einzelnen Tabelle


ALTER TABLE --Tabellenname einsetzen CONVERT TO CHARACTER SET utf8mb4 COLLATE 'utf8mb4_unicode_ci';

Standard-Kundengruppe wiederherstellen

 

So wird die "Standard-Kundengruppe" ohne eine Übersetzung wiederhergestellt. Die Übersetzungen müssen im Admin manuell gepflegt werden.

Query zum Wiederherstellen der Standard-Kundengruppe:
 

INSERT INTO `customer_group` (`id`, `display_gross`, `registration_active`, `created_at`, `updated_at`) VALUES
(UNHEX('CFBD5018D38D41D8ADCA10D94FC8BDD6'), 1, 0, '2021-01-01 00:00:00.00', NULL);

War dieser Artikel hilfreich?