DjElf Δημοσ. 5 Νοεμβρίου 2010 Δημοσ. 5 Νοεμβρίου 2010 Προσπαθω να περασω τον παρακατω κωδικα σε 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));
_tasos Δημοσ. 5 Νοεμβρίου 2010 Δημοσ. 5 Νοεμβρίου 2010 Δοκίμασε να ορίσεις τα πεδία date και ar_kikloforias_ep not null στον πίνακα.
DjElf Δημοσ. 5 Νοεμβρίου 2010 Μέλος Δημοσ. 5 Νοεμβρίου 2010 Δοκίμασε να ορίσεις τα πεδία date και ar_kikloforias_ep not null στον πίνακα. Οχι, ακομα το ιδιο σφαλμα παιρνω... ps: Υπαρχει περιπτωση το λαθος να μην ειναι συντακτικο αλλα λογικο ???
fotis4u Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 Καλησπέρα. Έτρεξα τους παραπάνο πίνακες στην 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
_tasos Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 Οχι, ακομα το ιδιο σφαλμα παιρνω... ps: Υπαρχει περιπτωση το λαθος να μην ειναι συντακτικο αλλα λογικο ??? Λοιπόν, έτρεξα τις create σου και από τον πίνακα EPISKEUH έβγαλα το foreign key και δημιουργήθηκε κανονικά. Μπορείς είτε να μην βάλεις το foreign key (όχι κ τόσο καλή ιδέα) ή να αλλάξεις το primary key του OXHMA να είναι μόνο το πεδίο ar_kikloforias που έτσι κι αλλιώς είναι μοναδικό για κάθε αυτοκίνητο.
fotis4u Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 Το να βγάλεις το foreign key απο τον πίνακα EPISKEUH δεν νομίζω ότι είναι η λύση, απο την στιμγή που το πεδίο ar_kikloforias_ep κάνει αναφορά στο πεδίο ar_kikloforias του πίνακα ΟΧΗΜΑ. Αλλά να κάνεις αυτό που πολύ σωστά είπε και ο τάσος, να ορίσεις ως μοναδικό Primary Key μόνο το πεδίο ar_kikloforias, το οποίο είναι και μοναδικό για κάθε όχημα.
DjElf Δημοσ. 6 Νοεμβρίου 2010 Μέλος Δημοσ. 6 Νοεμβρίου 2010 Καλησπέρα.Έτρεξα τους παραπάνο πίνακες στην 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 ειναι λαθος, καθως θελω να εχω την πληροφορια του ονοματος του ιδιοκτητη για καθε οχημα....
_tasos Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 Στον πίνακα επισκευή βάζεις ένα foreign key reference στο πεδίο ar_kikloforias του πίνακα OXHMA. Σωστά; Αυτό όμως δεν γίνεται διότι το πεδίο αυτό δεν είναι από μόνο του primary key στον πίνακα OXHMA. Το foreign key reference πρέπει να γίνεται σε κλειδί του πίνακα. Θα πρέπει ο πίνακας EPISKEUH να έχει όλο το κλειδί του πίνακα OXHMA για να μπορέσεις να βάλεις το foreign key reference. Αυτό που σου είπα να κάνεις είναι να μην έχεις στο πίνακα OXHMA το όνομα του πελάτη στο primary key. Φυσικά και πρέπει να το έχεις σαν foreign key για να μπορέσεις να έχεις σωστά τα δεδομένα σου.
DjElf Δημοσ. 6 Νοεμβρίου 2010 Μέλος Δημοσ. 6 Νοεμβρίου 2010 Στον πίνακα επισκευή βάζεις ένα 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, ???
fotis4u Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 Θα σου πρότηνα να κάνεις το εξής για αρχή να δείς εαν θα σου τρέξει η βάση. Στο δεύτερο πίνακα (Τ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)); Ενημέρωσε με για τυχών προβλήματα-απορίες.
DjElf Δημοσ. 6 Νοεμβρίου 2010 Μέλος Δημοσ. 6 Νοεμβρίου 2010 Θα σου πρότηνα να κάνεις το εξής για αρχή να δείς εαν θα σου τρέξει η βάση.Στο δεύτερο πίνακα (Τ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ταν τρεχω αυτη τη βαση ολα λειτουργουν σωστα. Ειναι ομως το ιδιο με βαση την ερωτηση μου απο πανω? Ειναι δηλαδη ιδια τα κλειδια?
fotis4u Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 Τα κλειδιά δεν είναι ιδια στους 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 τρέχεις, διαφορετικά θα σου προτείνω έναν τρόπο πρώτα την δημιουργεία κάθε πίνακα και μετά να βάλουμε τις συσχετίσεις.
DjElf Δημοσ. 6 Νοεμβρίου 2010 Μέλος Δημοσ. 6 Νοεμβρίου 2010 Τα κλειδιά δεν είναι ιδια στους 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 και ειχα το σφαλμα...Λες πραγματικα να εφταιγε αυτο ???
fotis4u Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 Πιστεύω πως ναι. Βασικά αυτο καθορίζετε απο ποιά έκδοση της MySQL τρέχεις. Εγώ τρέχω σε Linux την Server version: 5.1.49-1ubuntu8 (Ubuntu) και δεν είχα κανένα πρόβλημα. Το TYPE = INNODB είναι παλεότερο συντακτικό της MySQL, και μάλλον γιαυτό δεν σου αναγνώριζε με το ENGINE = INNODB. Για να δείς τι απο τα δύο σου υποστηρίζει γράψε την εντολή: mysql> SHOW ENGINES\G; και βρές το InnoDB και κοίταξε στο Support να δείς εάν είναι διαθέσιμο. Θα πρέπει να δείς κάτι τέτοιο: Μπορείς να ρίξεις και μια ματιά στο παρακάτω link: http://linuxers.org/howto/myisam-or-innodb-mysql-engine
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.