Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 19.09.2007 22:03:44 von Christian Franzen

Hi!

Ich hab gerade mit dem DbDesigner 4 versucht ein Design auf meinern MySQL
Server zu laden und bei einer Tabelle hängt es warum auch immer. Seht ihr
was falsch ist? Die Tabelle users die in dem SQL Statement referenziert wird
wurde fehlerfrei angelegt:

CREATE TABLE forum_posts (
id BIGINT UNSIGNED NOT NULL,
topic_id BIGINT UNSIGNED NOT NULL,
user_id BIGINT UNSIGNED NOT NULL,
topic VARCHAR(100) NULL,
post_text VARCHAR(10000) NULL,
post_date DATETIME NULL,
last_update DATETIME NULL,
updated BOOL NULL,
last_poster_id BIGINT NULL,
last_post_date DATETIME NULL,
PRIMARY KEY(id),
INDEX forum_posts_FKIndex1(user_id),
INDEX forum_posts_FKIndex2(topic_id),
FOREIGN KEY(user_id)
REFERENCES users(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(topic_id)
REFERENCES forum_posts(id)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

mfg Xion

Re: Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 19.09.2007 23:04:10 von Andreas Scherbaum

Christian Franzen wrote:
>
> Ich hab gerade mit dem DbDesigner 4 versucht ein Design auf meinern MySQL
> Server zu laden und bei einer Tabelle hängt es warum auch immer. Seht ihr
> was falsch ist? Die Tabelle users die in dem SQL Statement referenziert wird
> wurde fehlerfrei angelegt:

Nun, wie wäre es, die mystische Fehlermeldung, die du bekommst, uns auch
mitzuteilen?


> FOREIGN KEY(topic_id)
> REFERENCES forum_posts(id)
> ON DELETE CASCADE
> ON UPDATE CASCADE

Bin mir nicht sicher, aber kannst du eine Tabelle referenzieren, die noch
nicht vorhanden ist?


Bye

--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)

Re: Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 20.09.2007 00:57:55 von B.Steinbrink

On Wed, 19 Sep 2007 22:03:44 +0200, Christian Franzen wrote:

> Hi!
>
> Ich hab gerade mit dem DbDesigner 4 versucht ein Design auf meinern
> MySQL Server zu laden und bei einer Tabelle hngt es warum auch immer.
> Seht ihr was falsch ist? Die Tabelle users die in dem SQL Statement
> referenziert wird wurde fehlerfrei angelegt:
>
> CREATE TABLE forum_posts (
> id BIGINT UNSIGNED NOT NULL,
> topic_id BIGINT UNSIGNED NOT NULL,
> user_id BIGINT UNSIGNED NOT NULL,
^^^^^^
Ist das nicht leicht übertrieben?

> topic VARCHAR(100) NULL,
> post_text VARCHAR(10000) NULL,
^^^^^

War VARCHAR nicht mal auf 255 Zeichen limitiert? (Ich lasse mich gern
belehren, dass dem nicht (mehr) so ist).

> post_date DATETIME NULL,
> last_update DATETIME NULL,
> updated BOOL NULL,
> last_poster_id BIGINT NULL,

Willst du darauf evtl. auch einen Fremdschlüssel?

> last_post_date DATETIME NULL,
> PRIMARY KEY(id),
> INDEX forum_posts_FKIndex1(user_id),
> INDEX forum_posts_FKIndex2(topic_id),
> FOREIGN KEY(user_id)
> REFERENCES users(id)
> ON DELETE CASCADE
> ON UPDATE CASCADE,
> FOREIGN KEY(topic_id)
> REFERENCES forum_posts(id)
> ON DELETE CASCADE
> ON UPDATE CASCADE
> )
> TYPE=InnoDB;

> Errno 150 auf MySQL 5 [aus dem Betreff kopiert]

Begegnet einem meist, wenn die Spaltentypen in den beiden Tabellen nicht
exakt gleich sind (z.B. signed vs. unsigned) oder kein Index in der
referenzierten Tabelle auf der referenzierten Spalte existiert. (Ich
dachte eigentlich, letzteres wäre inzwischen abgeschafft, ein 5.0.45
meckert hier aber immer noch).

Björn

Re: Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 20.09.2007 08:05:31 von Sebastian Suchanek

Björn Steinbrink schrieb:
> On Wed, 19 Sep 2007 22:03:44 +0200, Christian Franzen wrote:
>
>> [...]
>> topic VARCHAR(100) NULL,
>> post_text VARCHAR(10000) NULL,
> ^^^^^
>
> War VARCHAR nicht mal auf 255 Zeichen limitiert? (Ich lasse mich gern
> belehren, dass dem nicht (mehr) so ist).
> [...]

Ja, seit 5.0.3 ist das Limit auf 65.535 gestiegen.


HTH,

Sebastian

Re: Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 20.09.2007 10:43:09 von Christian Franzen

"Andreas Scherbaum" schrieb
> Nun, wie wäre es, die mystische Fehlermeldung, die du bekommst, uns auch
> mitzuteilen?

Fehler lautet in etwa: Can't create table "users.frm": errno 150


> Bin mir nicht sicher, aber kannst du eine Tabelle referenzieren, die noch
> nicht vorhanden ist?

Weiß ich nicht sicher. Ich meine aber das schonmal in einer anderen Tabelle
gemacht zu haben.

mfg Xion

Re: Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 20.09.2007 10:46:36 von Axel Schwenke

"Christian Franzen" wrote:
>
> Ich hab gerade mit dem DbDesigner 4 versucht ein Design auf meinern MySQL
> Server zu laden und bei einer Tabelle hängt es warum auch immer.

Errno 150 ist ein Foreign Key Fehler. SHOW INNODB STATUS zeigt Details.


XL

Re: Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 20.09.2007 10:59:51 von Christian Schmelzer

Christian Franzen wrote:
> Hi!
>
> Ich hab gerade mit dem DbDesigner 4 versucht ein Design auf meinern
> MySQL Server zu laden und bei einer Tabelle hängt es warum auch
> immer. Seht ihr was falsch ist? Die Tabelle users die in dem SQL
> Statement referenziert wird wurde fehlerfrei angelegt:
>
> CREATE TABLE forum_posts (
> id BIGINT UNSIGNED NOT NULL,
> topic_id BIGINT UNSIGNED NOT NULL,
> user_id BIGINT UNSIGNED NOT NULL,
> topic VARCHAR(100) NULL,
> post_text VARCHAR(10000) NULL,
> post_date DATETIME NULL,
> last_update DATETIME NULL,
> updated BOOL NULL,
> last_poster_id BIGINT NULL,
> last_post_date DATETIME NULL,
> PRIMARY KEY(id),
> INDEX forum_posts_FKIndex1(user_id),
> INDEX forum_posts_FKIndex2(topic_id),
> FOREIGN KEY(user_id)
> REFERENCES users(id)
> ON DELETE CASCADE
> ON UPDATE CASCADE,
> FOREIGN KEY(topic_id)
> REFERENCES forum_posts(id)
> ON DELETE CASCADE
> ON UPDATE CASCADE
> )
> TYPE=InnoDB;
>
> mfg Xion

Hallo,
die Meldung bekommst du meines Wissen auch wenn die Typen der Spalten, die
du referenzierst, nicht identisch sind.

Christian

Re: Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 20.09.2007 14:28:41 von Christian Franzen

"Björn Steinbrink" schrieb
>> user_id BIGINT UNSIGNED NOT NULL,
> ^^^^^^
> Ist das nicht leicht übertrieben?

Kann schon sein das BIGINT ein bissel viel ist, da ich aber genung
Speicherplatz habe und mir dadurch sonst kein Nachteil entsteht kalkulier
ich gleich alle Eventualitäten ein :)

>> last_poster_id BIGINT NULL,
>
> Willst du darauf evtl. auch einen Fremdschlüssel?

Ja stimmt, danke. Hatte ich übersehen

Re: Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 20.09.2007 14:30:36 von Christian Franzen

"Andreas Scherbaum" schrieb
> Bin mir nicht sicher, aber kannst du eine Tabelle referenzieren, die noch
> nicht vorhanden ist?

Danke, genau das war das Problem. Wenn ich den FKEY nach dem CREATE
hinzufüge funzt alles. Dann hatte ich es damals wohl doch anders gemacht.

mfg Xion

Re: Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 20.09.2007 14:31:00 von Christian Franzen

"Axel Schwenke" schrieb
> Errno 150 ist ein Foreign Key Fehler. SHOW INNODB STATUS zeigt Details.

Danke hat mir sehr geholfen. Hab den Fehler damit gefunden.

Re: Was funzt an dieser Anfrage nicht? Errno 150 auf MySQL 5

am 20.09.2007 15:04:15 von Sebastian Suchanek

Christian Franzen schrieb:
> "Björn Steinbrink" schrieb
>>> user_id BIGINT UNSIGNED NOT NULL,
>> ^^^^^^
>> Ist das nicht leicht übertrieben?
>
> Kann schon sein das BIGINT ein bissel viel ist, da ich aber genung
> Speicherplatz habe und mir dadurch sonst kein Nachteil entsteht kalkulier
> ich gleich alle Eventualitäten ein :)
> [...]

Öhm, UNSIGNED BIGINT hat einen Wertebereich von 1,81*10^19, in
Worten 18,1 Trilliarden. IOW: Du kannst jedem Erdenbürger knapp 3
Mrd. Accounts geben. Wow. ;-)


Tschüs,

Se-"hoffentlich nicht verrechnet ;-)"-bastian