Tag: MySQL

MySQL error: Cannot truncate a table referenced in a foreign key constraint

By default, you cannot TRUNCATE a table that has foreign key constraints applied on it. This is to keep the data consistent over multiple tables that are linked by constraints.

Solution 1

The fastest way to clean the table is to disable FOREIGN_KEY_CHECKS:

SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE `table1`;
TRUNCATE `table2`;
SET FOREIGN_KEY_CHECKS = 1;

Keep in mind, that disabling FOREIGN_KEY_CHECKS might result in inconsistent data with foreign key values that do not exists.

Solution 2

To remove all rows, you can also go the long way:

  • Remove all foreign key constraints
  • Run TRUNCATE on the table(s)
  • Manually delete all rows without reference
  • Recreate the foreign key constraints

Photo by Jan Antonin Kolar on Unsplash

 

Apache2, PHP und MySQL über MacPorts installieren

Es gibt hier im Blog bereits eine Vielzahl an Posts zu diesem Thema. Warum? Mit jedem Update von Mac OS X scheint sich wieder etwas zu ändern, sodass die Installation von Apache / PHP / MySQL mittels MacPorts nicht mehr funktionieren möchte.

Was bei den einzelnen OS X Versionen zu beachten ist, ist in den HowTo-Beiträgen auf macports.org bestens beschrieben: https://trac.macports.org/wiki/howto.

Detaillierte Information gibt es auf den Unterseiten zu Apache2, PHP und auch MySQL.

 

MySQL: Tabellen in andere Datenbank kopieren

Mit nachstehenden MySQL-Befehlen lässt sich eine Tabelle recht einfach in eine andere Datenbank kopieren. In diesem Beispiel werden die Daten von db1 in db2 kopiert.

Zunächst muss die neue Tabelle (mit gleicher Struktur) erstellt werden:

CREATE TABLE db2.newTable LIKE db1.oldTable

Danach können die Daten in die neue Tabelle kopiert werden:

ALTER TABLE db2.newTable DISABLE KEYS
INSERT INTO db2.newTable SELECT * FROM db1.oldTable
ALTER TABLE db2.newTable ENABLE KEYS

MySQL-Variablen für Spaltennamen (und andere Identifier) verwenden

Variablen lassen sich in MySQL hervorragend für Strings, Zahlenwerte oder auch binäre Daten verwenden. Möchte man diese Variablen jedoch zum Adressieren von Spalten, Tabellen oder Datenbanken verwenden, dann erfordert dies ein etwas anderes Vorgehen. Dieser Artikel gibt eine kurze Zusammenfassung, wie man MySQL-Variablen in Abfragen einsetzt.

Spalte einer MySQL-Tabelle verschieben

Die Spalte einer MySQL-Tabelle lässt sich folgendermaßen an eine andere Position verschieben:

ALTER TABLE <tabelle> MODIFY <spaltenname> tinyint(1) DEFAULT '0'
AFTER <spaltenname_vor_neuer_position>

Wichtig ist hierbei auch die Angabe der Spaltendefinitionen. Eingaben wie “tinyint(1) DEFAULT ‘0’” müssen also den Definitionen der Spalte entsprechen und beim Verschieben mit angegeben werden.