CREATE TABLE IF NOT EXISTS

Loddar1

Erfahrenes Mitglied
Hallo alle die Online sind,
ich habe da mal eine Frage wenn ich mit einer php-datei eine install.php erstellen möchte:
PHP:
"CREATE TABLE IF NOT EXISTS `tabelle` (
  `id` int(4) unsigned NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  `mail` varchar(50) NOT NULL,
  `ort`  varchar(50) NOT NULL,
  PRIMARY KEY  (`id`));
";

"INSERT INTO `tabelle` VALUES (1, 'Max', 'info@domain.de', 'Berlin'); ";
"INSERT INTO `tabelle` VALUES (2, 'Horst', 'horst@domain.de', 'Hamburg'); ";
Gibt es für INSERT INTO das gleiche?
zum Beispiel:
PHP:
"INSERT INTO IF NOT EXISTS `tabelle` VALUES (1, 'Max', 'info@domain.de', 'Berlin'); ";
"INSERT INTO IF NOT EXISTS `tabelle` VALUES (2, 'Horst', 'horst@domain.de', 'Hamburg'); ";

oder geht das anders oder gar nicht?

Danke an alle im vorraus Loddar1
 
Lösung
Nein, genau so lassen wie es ist.
Mach doch mal ne frische Test-Tabelle
SQL:
INSERT INTO `tabelle` VALUES (2, 'Horst', 'horst@domain.de', 'Hamburg');
SELECT * FROM `tabelle`;
Und danach feuerst du das hier ab
SQL:
INSERT INTO `tabelle` VALUES (2, 'Horst-Uwe', 'horst_uwe@irgendwo.de', 'Berlin')
ON DUPLICATE KEY UPDATE `name`=VALUES(`name`), `mail`=VALUES(`mail`), `ort`=VALUES(`ort`);
SELECT * FROM `tabelle`;
Und schau dir dann die Spalten-Werte an (inkl. ID)
Im ON DUPLICATE-Teil ist VALUES() eine Funktion, welches die "neuen" Werte für die Spalten abholt.

EDIT: Wie gesagt: Du sollest vorher wissen, wie du mit doppelten Primär-Schlüsseln umgehen willst.
Ignorieren oder Ersetzen.
MySQL? Oracle? MS SQL?

IF NOT EXISTS ist mWn kein Standart-SQL. Darum ist es wichtig, was für eine DB du hast
 
INSERT IGNORE
MySQL INSERT IGNORE Statement Explained By Examples
Achtung: Damit ignorierst du im wahrsten Sinne des Wortes den INSERT.
Falls es aber einen existierenden Sattz ersetzen soll, empfehle ich eher die ON DUPLICATE KEY-Methode als das REPLACE-Statement.
Hintergrund: Das REPLACE-Statement löscht einen vorhandenen Satz um diesen mit den neuen Daten zu ersetzen. Und jetzt hast du an diesem Satz anhängend noch eine Detail-Tabelle per Fremdschlüsseln und BOOM!
"INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE"
SQL:
INSERT IGNORE INTO `tabelle` VALUES (1, 'Max', 'info@domain.de', 'Berlin');
INSERT IGNORE INTO `tabelle` VALUES (2, 'Horst', 'horst@domain.de', 'Hamburg');
SQL:
INSERT INTO `tabelle` VALUES (1, 'Max', 'info@domain.de', 'Berlin') ON DUPLICATE KEY UPDATE `name`=VALUES(`name`), `mail`=VALUES(`mail`), `ort`=VALUES(`ort`);
INSERT INTO `tabelle` VALUES (2, 'Horst', 'horst@domain.de', 'Hamburg') ON DUPLICATE KEY UPDATE `name`=VALUES(`name`), `mail`=VALUES(`mail`), `ort`=VALUES(`ort`);
 
Zuletzt bearbeitet:
MySQL? Oracle? MS SQL?

IF NOT EXISTS ist mWn kein Standart-SQL. Darum ist es wichtig, was für eine DB du hast
IF NOT EXISTS ist mWn SQL-Standard, aber nur für das CREATE-Statement (Table, View, Procedure, Index, Trigger).
Kann mich aber auch irren, habe es zumindest bei allen gängigen Datenbank-Formaten gesehen (SQLite, PostGres, MySQL/Maria, MS-SQL)
 
Nein, genau so lassen wie es ist.
Mach doch mal ne frische Test-Tabelle
SQL:
INSERT INTO `tabelle` VALUES (2, 'Horst', 'horst@domain.de', 'Hamburg');
SELECT * FROM `tabelle`;
Und danach feuerst du das hier ab
SQL:
INSERT INTO `tabelle` VALUES (2, 'Horst-Uwe', 'horst_uwe@irgendwo.de', 'Berlin')
ON DUPLICATE KEY UPDATE `name`=VALUES(`name`), `mail`=VALUES(`mail`), `ort`=VALUES(`ort`);
SELECT * FROM `tabelle`;
Und schau dir dann die Spalten-Werte an (inkl. ID)
Im ON DUPLICATE-Teil ist VALUES() eine Funktion, welches die "neuen" Werte für die Spalten abholt.

EDIT: Wie gesagt: Du sollest vorher wissen, wie du mit doppelten Primär-Schlüsseln umgehen willst.
Ignorieren oder Ersetzen.
 
Zuletzt bearbeitet:
Lösung
Hi Zvoni
Ich Danke dir für deine Mühe, das letzte funktioniert und zwar genau so wie ich es will!.
Ist zwar alles nur für den XAMPP aber ich teste sehr viel.
 
Zurück