Προς το περιεχόμενο

ΜySQL Can't create table (errno: 150)


DjElf

Προτεινόμενες αναρτήσεις

Δημοσ.

Προσπαθω να περασω τον παρακατω κωδικα σε MySQL αλλα το 3ο table δεν με αφηνει να το φτιαχω , βγαζοντας μου το παρακατω σφαλμα, Can't create table test.episkeuh (errno: 150). Γνωριζει κανεις που ειναι το λαθος ????

 

CREATE TABLE PELATHS

(onoma varchar(20) not null,

tilefwno varchar(20),

dieythinsi varchar(20),

primary key(onoma));

 

CREATE TABLE OXHMA

(ar_kikloforias int not null,

marka varchar(20),

montelo varchar(20),

xronia varchar(20),

onoma_oxhma varchar(20) not null,

foreign key(onoma_oxhma) references PELATHS(onoma),

primary key(onoma_oxhma, ar_kikloforias));

 

CREATE TABLE EPISKEUH

(perigrafh varchar(100),

date varchar(20),

kostos int,

ar_kikloforias_ep int not null,

foreign key(ar_kikloforias_ep) references OXHMA(ar_kikloforias),

primary key(date, ar_kikloforias_ep));

Δημοσ.
Δοκίμασε να ορίσεις τα πεδία date και ar_kikloforias_ep not null στον πίνακα.

 

Οχι, ακομα το ιδιο σφαλμα παιρνω...

 

ps: Υπαρχει περιπτωση το λαθος να μην ειναι συντακτικο αλλα λογικο ???

Δημοσ.

Καλησπέρα.

Έτρεξα τους παραπάνο πίνακες στην MySQL και μου τους δημιούργησε κανονικά.

Θέσε στον πίνακα OXHMA το πεδίο ar_kikloforias int(15)....

δλδ δώσε μια τιμή-πεδιο στην μεταβλήτη int, και κάνε και το ίδιο στο πίνακα EPISKEUH στο πεδίο ar_kikloforias_ep int(15), θέσε και εκεί στην μεταβλητή την ίδια τιμή int(15)....

 

---------- Προσθήκη στις 01:57 ---------- Προηγούμενο μήνυμα στις 01:46 ----------

 

Καλησπέρα.

Έτρεξα τους παραπάνο πίνακες στην MySQL και μου τους δημιούργησε κανονικά.

Θέσε στον πίνακα OXHMA το πεδίο ar_kikloforias int(15)....

δλδ δώσε μια τιμή-πεδιο στην μεταβλήτη int, και κάνε και το ίδιο στο πίνακα EPISKEUH στο πεδίο ar_kikloforias_ep int(15), θέσε και εκεί στην μεταβλητή την ίδια τιμή int(15)....

 

Εγώ πέρνω τα παρακάτω αποτελέσματα.

http://img543.imageshack.us/img543/2505/mysql.png

Δημοσ.
Οχι, ακομα το ιδιο σφαλμα παιρνω...

 

ps: Υπαρχει περιπτωση το λαθος να μην ειναι συντακτικο αλλα λογικο ???

 

Λοιπόν, έτρεξα τις create σου και από τον πίνακα EPISKEUH έβγαλα το foreign key και δημιουργήθηκε κανονικά.

 

Μπορείς είτε να μην βάλεις το foreign key (όχι κ τόσο καλή ιδέα) ή να αλλάξεις το primary key του OXHMA να είναι μόνο το πεδίο ar_kikloforias που έτσι κι αλλιώς είναι μοναδικό για κάθε αυτοκίνητο.

Δημοσ.

Το να βγάλεις το foreign key απο τον πίνακα EPISKEUH δεν νομίζω ότι είναι η λύση, απο την στιμγή που το πεδίο ar_kikloforias_ep κάνει αναφορά στο πεδίο ar_kikloforias του πίνακα ΟΧΗΜΑ.

 

Αλλά να κάνεις αυτό που πολύ σωστά είπε και ο τάσος, να ορίσεις ως μοναδικό Primary Key μόνο το πεδίο ar_kikloforias, το οποίο είναι και μοναδικό για κάθε όχημα.

Δημοσ.
Καλησπέρα.

Έτρεξα τους παραπάνο πίνακες στην MySQL και μου τους δημιούργησε κανονικά.

Θέσε στον πίνακα OXHMA το πεδίο ar_kikloforias int(15)....

δλδ δώσε μια τιμή-πεδιο στην μεταβλήτη int, και κάνε και το ίδιο στο πίνακα EPISKEUH στο πεδίο ar_kikloforias_ep int(15), θέσε και εκεί στην μεταβλητή την ίδια τιμή int(15)....

 

---------- Προσθήκη στις 01:57 ---------- Προηγούμενο μήνυμα στις 01:46 ----------

 

 

Εγώ πέρνω τα παρακάτω αποτελέσματα.

http://img543.imageshack.us/img543/2505/mysql.png

 

Χρησημοποιω την ΜySQL σε Windows και παρολο που κανω τις μετατροπες που προτηνεις εχω ακομα το ιδιο σφαλμα......πραγματικα πολυ περιεργο......

Να σημειωσω οτι χρησημοποιω την ENGINE=innodb;

 

---------- Προσθήκη στις 16:43 ---------- Προηγούμενο μήνυμα στις 16:39 ----------

 

Το να βγάλεις το foreign key απο τον πίνακα EPISKEUH δεν νομίζω ότι είναι η λύση, απο την στιμγή που το πεδίο ar_kikloforias_ep κάνει αναφορά στο πεδίο ar_kikloforias του πίνακα ΟΧΗΜΑ.

 

Αλλά να κάνεις αυτό που πολύ σωστά είπε και ο τάσος, να ορίσεις ως μοναδικό Primary Key μόνο το πεδίο ar_kikloforias, το οποίο είναι και μοναδικό για κάθε όχημα.

 

Το να βγαλω το foreign key Onoma_οχημα απο το table oxhma ειναι λαθος, καθως θελω να εχω την πληροφορια του ονοματος του ιδιοκτητη για καθε οχημα....

Δημοσ.

Στον πίνακα επισκευή βάζεις ένα foreign key reference στο πεδίο ar_kikloforias του πίνακα OXHMA. Σωστά; Αυτό όμως δεν γίνεται διότι το πεδίο αυτό δεν είναι από μόνο του primary key στον πίνακα OXHMA. Το foreign key reference πρέπει να γίνεται σε κλειδί του πίνακα. Θα πρέπει ο πίνακας EPISKEUH να έχει όλο το κλειδί του πίνακα OXHMA για να μπορέσεις να βάλεις το foreign key reference.

 

Αυτό που σου είπα να κάνεις είναι να μην έχεις στο πίνακα OXHMA το όνομα του πελάτη στο primary key. Φυσικά και πρέπει να το έχεις σαν foreign key για να μπορέσεις να έχεις σωστά τα δεδομένα σου.

Δημοσ.
Στον πίνακα επισκευή βάζεις ένα foreign key reference στο πεδίο ar_kikloforias του πίνακα OXHMA. Σωστά; Αυτό όμως δεν γίνεται διότι το πεδίο αυτό δεν είναι από μόνο του primary key στον πίνακα OXHMA. Το foreign key reference πρέπει να γίνεται σε κλειδί του πίνακα. Θα πρέπει ο πίνακας EPISKEUH να έχει όλο το κλειδί του πίνακα OXHMA για να μπορέσεις να βάλεις το foreign key reference.

 

Αυτό που σου είπα να κάνεις είναι να μην έχεις στο πίνακα OXHMA το όνομα του πελάτη στο primary key. Φυσικά και πρέπει να το έχεις σαν foreign key για να μπορέσεις να έχεις σωστά τα δεδομένα σου.

 

Οταν εχω εναν pινακα ο οποιος εχει 2 κλειδια(δηλαδη το κλειδι του ειναι το (α,β)), το α δικο του γνωρισμα και το β το παιρνει απο καποιον αλλο, τοτε στο primary key δεν πρεπει να τα δηλωσω και τα 2 εκει? δηλαδη primary key(a,B) ???

Δημοσ.

Θα σου πρότηνα να κάνεις το εξής για αρχή να δείς εαν θα σου τρέξει η βάση.

Στο δεύτερο πίνακα (ΤABLE OXHMA) δοκίμασε να δηλώσεις ώς Primary Key μόνο το πεδίο ar_kikloforias. Δλδ τρέξε τους πίνακες ώς εξής:

 

CREATE TABLE PELATHS

(onoma varchar(20) not null,

tilefwno varchar(20),

dieythinsi varchar(20),

primary key(onoma));

 

CREATE TABLE OXHMA

(ar_kikloforias int not null,

marka varchar(20),

montelo varchar(20),

xronia varchar(20),

onoma_oxhma varchar(20),

foreign key(onoma_oxhma) references PELATHS(onoma),

primary key(ar_kikloforias));

 

CREATE TABLE EPISKEUH

(perigrafh varchar(100),

date varchar(20),

kostos int,

ar_kikloforias_ep int not null,

foreign key(ar_kikloforias_ep) references OXHMA(ar_kikloforias),

primary key(ar_kikloforias_ep));

 

Ενημέρωσε με για τυχών προβλήματα-απορίες.

Δημοσ.
Θα σου πρότηνα να κάνεις το εξής για αρχή να δείς εαν θα σου τρέξει η βάση.

Στο δεύτερο πίνακα (ΤABLE OXHMA) δοκίμασε να δηλώσεις ώς Primary Key μόνο το πεδίο ar_kikloforias. Δλδ τρέξε τους πίνακες ώς εξής:

 

CREATE TABLE PELATHS

(onoma varchar(20) not null,

tilefwno varchar(20),

dieythinsi varchar(20),

primary key(onoma));

 

CREATE TABLE OXHMA

(ar_kikloforias int not null,

marka varchar(20),

montelo varchar(20),

xronia varchar(20),

onoma_oxhma varchar(20),

foreign key(onoma_oxhma) references PELATHS(onoma),

primary key(ar_kikloforias));

 

CREATE TABLE EPISKEUH

(perigrafh varchar(100),

date varchar(20),

kostos int,

ar_kikloforias_ep int not null,

foreign key(ar_kikloforias_ep) references OXHMA(ar_kikloforias),

primary key(ar_kikloforias_ep));

 

Ενημέρωσε με για τυχών προβλήματα-απορίες.

 

Oταν τρεχω αυτη τη βαση ολα λειτουργουν σωστα.

Ειναι ομως το ιδιο με βαση την ερωτηση μου απο πανω? Ειναι δηλαδη ιδια τα κλειδια?

Δημοσ.

Τα κλειδιά δεν είναι ιδια στους 2 τελευταιους πίνακες. Όπως θα είδες ο πίνακας TABLE OXHMA έχει πλεόν μόνο ένα Primary Key το πεδίο ar_kikloforias.

 

Ενώ ο πίνακας TABLE EPISKEUH έχει Primary Key το πεδίο ar_kikloforias_ep.

 

Τα οποία και πιστεύω ότι είναι τα μοναδικά που πρέπει να βάλεις ως Primary Key. Είναι σαν πχ. να βάζεις για Primary Key τον αριθμό και το όνομα της αστυνομικής σου ταυτότητας, απο την στιγμή που ο αριθμός είναι μοναδικός.

 

Δοκίμασε να τρέξεις τις ίδιες εντολές αλλα στο τέλος να γράψεις και την παράμετρο type=innodb, δλδ:

 

CREATE TABLE PELATHS

(onoma varchar(20) not null,

tilefwno varchar(20),

dieythinsi varchar(20),

primary key(onoma)) type=innodb;

 

CREATE TABLE OXHMA

(ar_kikloforias int not null,

marka varchar(20),

montelo varchar(20),

xronia varchar(20),

onoma_oxhma varchar(20) not null,

foreign key(onoma_oxhma) references PELATHS(onoma),

primary key(onoma_oxhma, ar_kikloforias)) type=innodb;

 

CREATE TABLE EPISKEUH

(perigrafh varchar(100),

date varchar(20),

kostos int,

ar_kikloforias_ep int not null,

foreign key(ar_kikloforias_ep) references OXHMA(ar_kikloforias),

primary key(date, ar_kikloforias_ep)) type=innodb;

 

Εάν δεν έχει και αυτό αποτέλεσμα ενημέρωσέ με ποία έκδοση της MySQL τρέχεις, διαφορετικά θα σου προτείνω έναν τρόπο πρώτα την δημιουργεία κάθε πίνακα και μετά να βάλουμε τις συσχετίσεις.

Δημοσ.
Τα κλειδιά δεν είναι ιδια στους 2 τελευταιους πίνακες. Όπως θα είδες ο πίνακας TABLE OXHMA έχει πλεόν μόνο ένα Primary Key το πεδίο ar_kikloforias.

 

Ενώ ο πίνακας TABLE EPISKEUH έχει Primary Key το πεδίο ar_kikloforias_ep.

 

Τα οποία και πιστεύω ότι είναι τα μοναδικά που πρέπει να βάλεις ως Primary Key. Είναι σαν πχ. να βάζεις για Primary Key τον αριθμό και το όνομα της αστυνομικής σου ταυτότητας, απο την στιγμή που ο αριθμός είναι μοναδικός.

 

Δοκίμασε να τρέξεις τις ίδιες εντολές αλλα στο τέλος να γράψεις και την παράμετρο type=innodb, δλδ:

 

CREATE TABLE PELATHS

(onoma varchar(20) not null,

tilefwno varchar(20),

dieythinsi varchar(20),

primary key(onoma)) type=innodb;

 

CREATE TABLE OXHMA

(ar_kikloforias int not null,

marka varchar(20),

montelo varchar(20),

xronia varchar(20),

onoma_oxhma varchar(20) not null,

foreign key(onoma_oxhma) references PELATHS(onoma),

primary key(onoma_oxhma, ar_kikloforias)) type=innodb;

 

CREATE TABLE EPISKEUH

(perigrafh varchar(100),

date varchar(20),

kostos int,

ar_kikloforias_ep int not null,

foreign key(ar_kikloforias_ep) references OXHMA(ar_kikloforias),

primary key(date, ar_kikloforias_ep)) type=innodb;

 

Εάν δεν έχει και αυτό αποτέλεσμα ενημέρωσέ με ποία έκδοση της MySQL τρέχεις, διαφορετικά θα σου προτείνω έναν τρόπο πρώτα την δημιουργεία κάθε πίνακα και μετά να βάλουμε τις συσχετίσεις.

 

Λοιπον, το ετρεξα ετσι οπως αναφερεις και μου λειτουργησε κανονικα....Απ'οτι φαινεται το λαθος ηταν στο type=innoddb. Eγω το εγραφα ως engine=innodb και ειχα το σφαλμα...Λες πραγματικα να εφταιγε αυτο ???

Δημοσ.

Πιστεύω πως ναι.

Βασικά αυτο καθορίζετε απο ποιά έκδοση της MySQL τρέχεις. Εγώ τρέχω σε Linux την Server version: 5.1.49-1ubuntu8 (Ubuntu) και δεν είχα κανένα πρόβλημα.

 

Το TYPE = INNODB είναι παλεότερο συντακτικό της MySQL, και μάλλον γιαυτό δεν σου αναγνώριζε με το ENGINE = INNODB.

 

Για να δείς τι απο τα δύο σου υποστηρίζει γράψε την εντολή:

mysql> SHOW ENGINES\G;

 

και βρές το InnoDB και κοίταξε στο Support να δείς εάν είναι διαθέσιμο.

 

Θα πρέπει να δείς κάτι τέτοιο:

screenshotoen.png

 

Μπορείς να ρίξεις και μια ματιά στο παρακάτω link:

http://linuxers.org/howto/myisam-or-innodb-mysql-engine

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...