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

MySQL help


me_robas

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

Δημοσ.

Έχω φτιάξει μια βάση δεδομένων στην MySQL. Η βάση μου περιέχει αρκετούς πίνακες. Μερικοί απο αυτούς περιέχουν "Ξένα Κλειδιά"!!. Το ερώτημα μου είναι το εξής: Οι σχέσεις μεταξύ των πινάκουν δημιουργούνται αυτόματα ή με κάποιες εντολές MySQl; Αν είναι εντολές μπορεί κάποιος να μου πεί ποιές είναι;

 

Βάζω και παράδειγμα 2 απο τους πίνακες μου

1ος:

[seekID] (primary key)

[seekFirstName]

[seekLastName]

.

.

.

 

2ος:

[ResID] (primary key)

[seekID] (foreign key)

[ResStatus]

.

.

.

 

Η απορία μου είναι πως θα γίνει η σύνδεση του πεδίου [seekID] του 1ου πίνακα και του πεδίου [seekID] του δεύτερου πίνακα ώστε να πέρνει την εγγραφή του 1ου.

 

(Ελπίζω να μην έγινα κουραστικός κι να ήμουν κατανοητός)

 

Thanx προκαταβολικά σε όσους ασχοληθούν

Δημοσ.

Μια άλλη βοήθεια πρώτα. Πως μπορώ να μετατρέψω τους πίνακες στην mySQL απο MyISAM σε InnoDB; Το κάνω με την εντολή ALETR αλλά δεν τους αλλάζει; Πρέπει να γίνει κάποια ρύθμιση αρχικά στην MySQL για να τους δέχετε σ' αυτήν την μορφή;

Δημοσ.

Αν θυμάμαι καλά θα πρέπει να δώσεις μιαν εντολή σαν αυτή:

>SELECT 1oς.SeekFisrtName, 1ος.SeekLastname FROM 1ος INNER JOIN 2ος USING (SeekID);
         

Γενικά για να συνδέεις πίνακες μεταξύ τους πρέπει να χρησιμοποιείς μια μορφή JOIN όπως η παραπάνω ή κάποιο συνθήκη WHERE (π.χ WHERE 1oς.SeekID = 2ος.SeekID).

Δημοσ.

Το 2ο ερώτημα άκυρο. Επανερχόμαστε στο πρώτο. Αλλά πριν απο αυτό ένα άλλο: Πως μπορω να ορίσω ένα Foreign Key (FK) σε έναν πίνακα;

 

nazgul ευχαριστώ για το tip. θα το δοκιμάσω!

Δημοσ.

Σχετικά με το πρώτο το ίδιο επιτυγχάνεις και με:

>SELECT t1.SeekFirstName t1.SeekLastName FROM 1ος AS t1, 2oς AS t2 WHERE t1.SeekID = t2.SeekID;

 

Έτσι όμως δε θα σου γυρίσει κάτι συγκεκριμένο, παρά όλα τα First/Last name που τα SeekID των δύο πινάκων είναι ίδιο. Φαντάζομαι θα έχεις κι άλλο κριτήριο υπ'όψιν σου το οποίο θα κοτσάρεις με ένα AND στο WHERE.

Δημοσ.

Η δήλωση Foreign key δε νομίζω πως υποστηρίζεται από τις μέχρι τώρα εκδόσεις της MySQL αν και για λόγους συμβατότητας με το συντακτικό της SQL οι συγκεκριμένες εντολες γίνονται δεκτές από την MySQL. Με άλλα λόγια αν και μπορείς να δηλώσεις ένα πεδίο ως Foreign Key, αυτό δεν θα έχει καμία επίδραση πάνω στη βάση σου μιας και οι συγκεκριμένες εντολές απλώς αγνοούνται από την MySQL. Γενικά η MySQL είναι αρκετά περιορισμένη σαν DBMS μιας και δεν υποστηρίζει ούτε subqueries, ούτε transactions και άλλα καλούδια της SQL. Θα μπορούσες να δοκιμάσεις Firebird ή Postgresql για κάτι πιο προχωρημένο.

Δημοσ.

Αρχικά να πω ότι εγώ με MySQL 4.0.15 και foreign keys έχω βάλει που να τα τσεκάρει η βάση και transactions έχω κάνει με βοήθεια της PHP όμως.

 

Θα σου πρότεινα να κατεβάσεις το front end navicat ή premium mysql studio (το ίδιο πρόγραμμα είναι με δύο ονομασίες) το οποίο είναι από τα καλύτερα και μπορείς να βάλεις ξένα κλειδιά από επιλογή που έχει και import, export την βάση σε πάρα πολλά είδη αρχείων. Για εντολή για foreign keys θα πρέπει να την γράψεις κατά την δημιουργία του πίνακα αφού θα έχεις ήδη δημιουργήσει τον πίνακα που αναφέρεσαι φυσικά.

 

Παράδειγμα:

 

create table employee (

AM int(6) not null default '0',

SURNAME varchar(30) not null,

NAME varchar(20) not null,

PATRONYMIC varchar(20) not null,

ORDE int(2) not null default '1',

primary key (AM),

unique SURNAME (SURNAME, NAME, PATRONYMIC, DATE_OF_BIRTH),

index AM (AM),

index `ORDER` (ORDE),

FOREIGN KEY (ORDE) REFERENCES order_rank (ORDE))

type=InnoDB;

 

το γνώρισμα ORDE του order_rank είναι ξένο κλειδί στο γνώρισμα ORDE αυτού του πίνακα.

 

Η transaction αρχίζει με την εντολή BEGIN και τελειώνει με λάθος με ROLLBACK ή αν όλα πάνε καλά με COMMIT. Αν θέλετε να σας πω αναλυτικά με βοήθεια PHP πως το έκανα πείτε μου.

 

Φυσικά απ'όσο έχω δει η Firebird σκίζει, δεν την έχω χειριστεί πολύ αλλά έχει πολλά πράγματα.

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

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

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