PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mysql Syntax grml



Huhn Hur Tu
28.04.10, 14:40
Hallo,
ich versuche gerade nach folgender Anleitung
http://developer.gauner.org/ispmail-exim/
einen Mailserver zu basteln. Aber schon beim erstellen der DB habe ich Probleme.

Die DB ist erstellt Rechte vergeben, aber dann


mysql> CREATE TABLE IF NOT EXISTS `mail_accounts` (
`id` int(9) NOT NULL auto_increment,
`local_part` varchar(255) NOT NULL default '',
`domain` int(16) NOT NULL,
`forward` varchar(255) NOT NULL,
`cc` varchar(255) default NULL,
`name` varchar(255) NOT NULL default '',
`pwclear` varchar(255) NOT NULL default '',
`pwcrypt` varchar(255) NOT NULL default '',
`is_away` enum('yes','no') NOT NULL default 'no',
`away_text` text,
`spam_check` enum('yes','no') NOT NULL default 'no',
`spam_purge` enum('yes','no') NOT NULL default 'no',
`virus_check` enum('yes','no') NOT NULL default 'no',
`is_enabled` enum('yes','no') NOT NULL default 'yes',
`created_at` int(16) NOT NULL default '0',
`updated_at` int(16) NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQUE_EMAIL` (`domain`,`local_part`)
) ENGINE=InnoDB ;


Hier erstellt der Befehl nur die Table "mail_accounts", aber schreibt nichts rein, so wie ich das sehe.

und ich bekomme folgende Meldung.


mysql> mysql> CREATE TABLE IF NOT EXISTS `mail_accounts` (
-> `id` int(9) NOT NULL auto_increment,
-> `local_part` varchar(255) NOT NULL default '',
-> `domain` int(16) NOT NULL,
-> `forward` varchar(255) NOT NULL,
-> `cc` varchar(255) default NULL,
-> `name` varchar(255) NOT NULL default '',
-> `pwclear` varchar(255) NOT NULL default '',
-> `pwcrypt` varchar(255) NOT NULL default '',
-> `is_away` enum('yes','no') NOT NULL default 'no',
-> `away_text` text,
-> `spam_check` enum('yes','no') NOT NULL default 'no',
-> `spam_purge` enum('yes','no') NOT NULL default 'no',
-> `virus_check` enum('yes','no') NOT NULL default 'no',
-> `is_enabled` enum('yes','no') NOT NULL default 'yes',
-> `created_at` int(16) NOT NULL default '0',
-> `updated_at` int(16) NOT NULL default '0',
-> PRIMARY KEY (`id`),
-> UNIQUE KEY `UNIQUE_EMAIL` (`domain`,`local_part`)
-> ) ENGINE=InnoDB ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql> CREATE TABLE IF NOT EXISTS `mail_accounts` (
`id` int(9) NOT NULL auto_' at line 1

Wo hakt es hier?

gruss Stefan

magicmaster
28.04.10, 19:09
Sers,

ich habe das Statement bei mir ausprobiert und es funktioniert einwandfrei.

Kann es sein das du den Prompt "mysql>" mit reinkopiert hast?

Welche Mysql-Version hast du?

Huhn Hur Tu
28.04.10, 19:12
Mysql 5.0 irgendwas, das was bei Debian stable ist (kann ich erst wieder morgen raussuchen).
Nein den Prompt habe ich nicht mit reinkopiert.


Gruss Stefan

Rain_maker
28.04.10, 19:21
Nein den Prompt habe ich nicht mit reinkopiert.


mysql> mysql> CREATE TABLE IF NOT EXISTS `mail_accounts` (Deine eigene Ausgabe meint aber was ganz Anderes.

Also entweder hast Du bei der Eingabe selbst oder beim Posten geschlampt.

//Edit:

Und wenn man sich die zitierte Fehlermeldung ansieht:


check the manual that corresponds to your MySQL server version

for the right syntax to use near 'mysql> CREATE TABLE IF NOT EXISTS `mail_accounts` (Dann würde ich mal sehr stark auf Ersteres tippen.

Huhn Hur Tu
30.04.10, 10:14
OkOk ich hab da doch nen Fehler gemacht und den mysql Prompt mitreinkopiert, vielleicht auch nur beim letzten mal, egal.
ABER, nachdem ich die Tablel gedroppt habe den Befehl wiederholt habe sehe ich 0 rows affected und die Tabelle ist leer.


mysql> CREATE TABLE IF NOT EXISTS `mail_accounts` ( `id` int(9) NOT NULL auto_increment, `local_part` varchar(255) NOT NULL default '', `domain` int(16) NOT NULL, `forward` varchar(255) NOT NULL, `cc` varchar(255) default NULL, `name` varchar(255) NOT NULL default '', `pwclear` varchar(255) NOT NULL default '', `pwcrypt` varchar(255) NOT NULL default '', `is_away` enum('yes','no') NOT NULL default 'no', `away_text` text, `spam_check` enum('yes','no') NOT NULL default 'no', `spam_purge` enum('yes','no') NOT NULL default 'no', `virus_check` enum('yes','no') NOT NULL default 'no', `is_enabled` enum('yes','no') NOT NULL default 'yes', `created_at` int(16) NOT NULL default '0', `updated_at` int(16) NOT NULL default '0', PRIMARY KEY (`id`), UNIQUE KEY `UNIQUE_EMAIL` (`domain`,`local_part`) ) ENGINE=InnoDB;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Gruss Stefan

marce
30.04.10, 10:16
... und warum bist Du der Meinung, sollte in der Tabelle etwas drin stehen? Ich sehe nur ein create table - kein Insert, update oder sonst irgendwas...

Huhn Hur Tu
30.04.10, 10:23
Sollten da nicht ein paar rows sein? ich meine dazu ist das script doch da, auch wenn ich mich SQL nicht sonderlich auskenne.

Gruss Stefan

marce
30.04.10, 10:27
Ich bekomme, wenn ich die Aufbau-Anleitung für ein Ikea-Regal befolge auch nur ein leeres Regal...

-> Nein.

Huhn Hur Tu
30.04.10, 10:32
Database changed
mysql> ALTER TABLE `mail_accounts` ADD CONSTRAINT `mail_accounts_ibfk_1` FOREIGN KEY (`domain`) REFERENCES `domains` (`id`) ON DELETE CASCADE;
ERROR 1005 (HY000): Can't create table './maildb/#sql-dd7_49.frm' (errno: 150)
mysql>

Gut und warum funzt dass dann nicht??????
Um mal mit den Metaphern schluss zu machen.

Gruss Stefan

marce
30.04.10, 10:38
ok, das ist aber nun wieder ein ganz anderes Problem.

Gibt's die Tabelle domains denn? Bzw. die Spalte?

Google (http://www.google.de/search?q=mysql+ERROR+1005&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:de:official&client=firefox-a) meint, da könnte der Hase im's Korn geworfen worden sein...

Roger Wilco
30.04.10, 14:05
Gut und warum funzt dass dann nicht??????

$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

marce
30.04.10, 14:08
wenn man die Doku, die er wohl verwendet, sich mal (mehr oder weniger) aufmerksam durchliest wird die Tabelle, die refernziert wird, erst im nächsten Schritt erstellt. Naja, nicht jede Doku ist perfekt...

Huhn Hur Tu
30.04.10, 15:35
Ich hab jetzt mal erst die Create Table Befehle und danach die Alter Table und jetzt scheint es zu gehen.
Was für eine Möglichkeit habe ich zu sehen ob die Spalten auch angelegt sind?


Gruss Stefan

marce
30.04.10, 15:51
z.B. nachsehen? Im "gruseligsten Fall" mit sowas wie phpMyAdmin?

Wobei - wenn der SQL-Befehl sauber durchging, warum sollte es dann nicht angelegt sein?

Huhn Hur Tu
30.04.10, 16:11
Nur mal wegen der Meldung


Query OK, 0 rows affected, 1 warning (0.00 sec)

Aber das mit phpMyAdmin ist ne idee, das ist glaub ich auch noch irgenwo drauf:-)
Aber Danke erst mal


Gruss Stefan

oziris
01.05.10, 00:22
Was für eine Möglichkeit habe ich zu sehen ob die Spalten auch angelegt sind?
Zwei Möglichkeiten mit Beispielen und allem (linkskann man es für andere Versionen sehen, ist aber nicht viel anders):
http://dev.mysql.com/doc/refman/5.5/en/describe.html
http://dev.mysql.com/doc/refman/5.5/en/show-create-table.html

oziris
01.05.10, 00:30
Aber das mit phpMyAdmin ist ne idee, das ist glaub ich auch noch irgenwo drauf:-)
Könnte Overkill sein (ist ja Webbasiert und benötigt HTTP-Server und PHP). Das hier ist eine gewöhnliche GUI-Anwendung für sowas: http://mysql.com/products/workbench/

Huhn Hur Tu
01.05.10, 08:14
Danke erst mal an alle für die Antworten, ich hab auf meinem Webserver noch phpmyadmin gefunden, der freundlicherweise auch zu meinem Datenbankserver connected. Dort habe ich dann gesehen dass die Spalten drin sind.


Gruss Stefan