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 der folgenden Query kannst Du alle angelegten Produkte löschen und die Produkt-Übersicht somit komplett leeren:

DELETE FROM product;

Alle Eigenschaften löschen

Mit der folgenden Query kannst Du alle Eigenschaften entfernen:

DELETE FROM property_group;

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 FROM customer;

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 der folgenden Query kannst Du alle Bestellungen entfernen. 


TRUNCATE `order`;
TRUNCATE `order_address`;
TRUNCATE `order_customer`;
TRUNCATE `order_delivery`;
TRUNCATE `order_delivery_position`;
TRUNCATE `order_line_item`;
TRUNCATE `order_tag`;
TRUNCATE `order_transaction`;

Vererbung von allen Varianten aktivieren

Nach einer Migration ist in allen Variantenprodukten die Vererbung deaktiviert. Um die Vererbung zu aktivieren, muss lediglich die jeweilige Eigenschaft NULL als Wert in der Datenbank besitzen.

Mit folgender Query werden alle Eigenschaften und zusätzlich auch die Vererbung für die Eigenschaften aktiviert:

UPDATE product SET 
    active = NULL,
    tax_id = NULL,
    product_manufacturer_id = NULL, 
    delivery_time_id = NULL,
    deliveryTime = NULL, 
    product_media_id = NULL,
    manufacturer_number = NULL, 
    ean = NULL,
    restock_time = NULL,
    is_closeout = NULL,
    purchase_steps = NULL, 
    max_purchase = NULL, 
    min_purchase = NULL, 
    purchase_unit = NULL,
    reference_unit = NULL, 
    shipping_free = NULL,
    mark_as_topseller = NULL,
    weight = NULL, 
    width = NULL, 
    height = NULL, 
    length = NULL,
    release_date = NULL,
    tag_ids = NULL,
    tags = NULL
WHERE parent_id IS NOT NULL;

DELETE FROM product_translation WHERE product_id IN (SELECT id FROM product WHERE parent_id IS NOT NULL);
DELETE FROM product_tag WHERE product_id IN (SELECT id FROM product WHERE parent_id IS NOT NULL);
DELETE FROM product_media WHERE product_id IN (SELECT id FROM product WHERE parent_id IS NOT NULL);
DELETE FROM product_visibility WHERE product_id IN (SELECT id FROM product WHERE parent_id IS NOT NULL);
DELETE FROM product_property WHERE product_id IN (SELECT id FROM product WHERE parent_id IS NOT NULL);


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?