„DROP DATABASE“ – Anweisungen wurden deaktiviert.

Wer XAMPP benutzt und mit phpMyAdmin versucht eine Datenbank zu löschen, der wird eventuell die Meldung: "DROP DATABASE" - Anweisungen wurden deaktiviert. erhalten. Ist das der Fall, muss man in der Datei C:\xampp\phpMyAdmin\config.inc.php folgende Zeile hinzugefügt werden: $cfg['AllowUserDropDatabase'] = true;. Danach muss der Apache -und MySQL-Server neu gestartet werden.

Insert only in specific columns with MySQL

If you have a big MySQL table and you want to insert data only in specific columns, then you can do this with naming the columns in parentheses after the table name:

INSERT INTO `wp_posts`(`post_author`,`post_content`,`post_title`,`post_date`) VALUES (0,'Hello World','Text...',NOW());

This works even without apostrophes:

INSERT INTO wp_posts(post_author,post_content,post_title,post_date) VALUES (0,'Hello World','Text...',NOW());

MySQL Stored Procedure Beispiel

Wer sich mit dem SQL-Skript aus dem [post id=2634]MySQL Cursor Beispiel[/post] beschäftigt hat wird festgestellt haben, dass der dort definierte Trigger check_amount nur funktioniert, wenn nicht mehr Produkte bestellt werden, als insgesamt überhaupt in allen Geschäften (engl. stores) verfügbar sind. Im Beispiel-Skript gibt es insgesamt 550 Fernseher:

1
2
3
4
-- Insert some products
INSERT INTO products(prod_id,name,store,stock) VALUES (NULL,'Fernseher','Berlin',250)$
INSERT INTO products(prod_id,name,store,stock) VALUES (NULL,'Fernseher','Potsdam',200)$
INSERT INTO products(prod_id,name,store,stock) VALUES (NULL,'Fernseher','Bremen',100)$

Wird nun die folgende Anfrage gestellt, dann werden mehr als 550 Fernseher bestellt und es kommt zu einem Trigger-Fehler:

1
INSERT INTO orders(user_id,product,amount) VALUES (1,'Fernseher',1300)$

Um diesen Fehler zu beseitigen, habe ich den check_amount-Trigger erweitert, so dass eine Stored Procedure namens availableQuantity abgefragt wird, welche dann Auskunft darüber liefert, wie hoch die verfügbare Anzahl eines Produktes ist. Ist diese Anzahl kleiner als die bestellte Menge, dann wird die bestellte Menge einfach auf die maximal verfügbare Anzahl gesetzt.
MySQL Stored Procedure Beispiel weiterlesen

MySQL Cursor Beispiel

Cursor dienen im Zusammenhang mit relationalen Datenbanken dazu, um das Impedance Mismatch auszugleichen. Das Impedance Mismatch entsteht durch den Unterschied von Programmiersprache und Datenbanksprache. Programmiersprachen arbeiten mit einzelnen Tupeln und relationale Datenbanken mit Mengen von Tupeln. Der Cursor ermöglicht es nun, die Ergebnismenge einer Datenbankabfrage in einzelnen Tupeln zu verarbeiten. Durch das Schlüsselwort FETCH sorgt dafür, dass das nächste Tupel aus der abgefragten Menge herangezogen wird. Um das zu veranschaulichen, habe ich das Beispiel aus dem [post id=2616]MySQL-Trigger Beitrag[/post] um eine Tabelle mit Produkten (products) und eine Tabelle mit Bestellungen (orders) erweitert.

Aus Zeitgründen kann ich dieses Beispiel im Moment nicht erklären. Ich werde dazu aber später ein Video machen und hoffe, dass bis dahin der Code zur Verständigung ausreicht.
MySQL Cursor Beispiel weiterlesen

MySQL Trigger Beispiel

SQL-Trigger werden zur Überwachung von semantischen Integritätsbedingungen eingesetzt. Trigger bilden dabei eine einfache Form von ECA-Regeln. ECA steht für „Event, Control, Action“ und definiert in Zusammenhang mit Datenbanken eine Aktion, die nach der Kontrolle eines Ereignis ausgeführt werden soll.

Zur praktischen Veranschaulichung habe ich ein MySQL-Skript mit drei Tabellen und einem Trigger geschrieben. In der Tabelle „users“ können Benutzer mit einem Vor- und Nachnamen eingetragen werden. Der im Skript definierte Trigger führt nach dem Eintragen in die „users“-Tabelle einen Stringvergleich aus und schreibt alle Benutzer, deren Nachname nicht mit einem Buchstaben größer „N“ anfängt in die „users_a_m“-Tabelle. Alle Benutzer, deren Nachname mit einem „N“ oder größer beginnt, werden in die Tabelle „users_n_z“ kopiert.

Mein Beispiel demonstriert neben dem definierten After-Trigger auch noch eine Möglichkeit zur Datenbank-Skalierung. Man könnte nämlich die Tabellen „users_a_m“ und „users_n_z“ auf verschiedene Datenbank-Server auslagern und beim Lesen von Datensätzen die entsprechende Datenbank anfragen (je nachdem mit welchem Anfangsbuchstaben der Nachname des gesuchten Benutzers anfängt). Dies hätte den Vorteil, das die Datenbank-Anfragen verteilt werden und die Anfrage-Last nicht auf eine einzige Datenbank trifft.
MySQL Trigger Beispiel weiterlesen

Mehrfach-Joins mit MySQL (Beispiel)

Hier ein kleiner Beispielcode, welcher 4 Tabellen (bestellung, kunde, anschrift, stammkunde) einer MySQL-Datenbank über die Primärschlüssel mit einem JOIN-Befehl verbindet:

1
2
3
4
5
6
7
8
9
10
11
12
SELECT 
  *
FROM 
  (bestellung b INNER JOIN kunde k ON b.kundennr = k.kundennr)
  INNER JOIN
    anschrift a ON a.anschriftid = k.rechnungsanschrift
    INNER JOIN
      stammkunde s ON k.KUNDENNR = s.KUNDENNR
WHERE
  s.rechnungsart = 'M'
    AND b.rechnungid IS NULL
    AND b.bestelldatum LIKE '2011-04-%'