mysql ευρετήρια

...IDE, compilers, κλπ

Συντονιστής: konnn

mysql ευρετήρια

Δημοσίευσηαπό P!nk » 17 Δεκ 2010, 11:51

έχω μία βάση δεδομένων με αρκετούς πίνακες, εκ των οποίων οι δύο είναι οι: περιφέρεια( ονομα περιφέρειας (key), # εδρών) και συνδυασμός (όνομα συνδυασμού(key), όνομα περιφέρειας, επικεφαλής)
και θέλω να εισάγω ένα συνδυασμό σε περιφέρεια μέσα από stored procedure αλλά δε πρέπει να υπάρχει συνδυασμός με το ίδιο όνομα σε άλλη περιφέρεια...
πως μπορώ να κάνω τον τελευταίο έλεγχο που χρειάζεται;μέσω ευρετηρίου;
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.04 raring 3.8.0-33-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.5.0-43-generic
3 AMD Athlon 64 X2 Dual Core Processor 3800+ ‖ RAM 2002 MiB ‖
4 nVidia G86 [GeForce 8500 GT] [10de:0421] {nouveau}
5 eth0: Marvell 88E8053 PCI-E Gigabit Ethernet Controller [11ab:4362] (rev 19) ⋮ eth1: Marvell 88E8001 Gigabit Ethernet Controller [11ab:4320] (rev 13) ⋮ wlan0: 148f:2573 Ralink Technology, Corp. RT2501/RT2573 Wireless Adapter
P!nk
babeTUX
babeTUX
 
Δημοσιεύσεις: 101
Εγγραφή: 31 Οκτ 2008, 13:27
Εκτύπωση

Re: mysql ευρετήρια

Δημοσίευσηαπό Αποστόλης » 17 Δεκ 2010, 20:50

Τι έλεγχο θέλεις να κάνεις;
Αν η εγγραφή που θα καταχωρήσεις υπάρχει ήδη;

Η stored procedure με τι γλώσσα θα εκτελεστεί;

Κάτι πολύ σημαντικό για τις βάσεις δεδομένων γενικώς. Τα πεδία που έχεις δηλώσει είναι απλά keys ή primary keys;
Γνώσεις ⇛ Linux:Μέτριο┃ Προγραμματισμός:Ναι ┃ Αγγλικά: Αρκετά Καλά
Λειτουργικό ⇛ Arch Linux 64bit ┃ Ubuntu Studio 10.4 64bit
Προδιαγραφές ⇛ HP Pavillion dv7 1199ev ┃ Intel 2 Core Duo T 9400, 2.53 Ghz ┃ 4GB ┃ NVIDIA GeForce 9600M GT ┃ Intel 82801I (ICH9 Family) HD Audio ┃ TFT 17" 1440x900
Αποστόλης
punkTUX
punkTUX
 
Δημοσιεύσεις: 170
Εγγραφή: 24 Ιουν 2009, 13:09
Εκτύπωση

Re: mysql ευρετήρια

Δημοσίευσηαπό P!nk » 17 Δεκ 2010, 21:09

Αποστόλης έγραψε:Τι έλεγχο θέλεις να κάνεις;
Αν η εγγραφή που θα καταχωρήσεις υπάρχει ήδη;

Η stored procedure με τι γλώσσα θα εκτελεστεί;

Κάτι πολύ σημαντικό για τις βάσεις δεδομένων γενικώς. Τα πεδία που έχεις δηλώσει είναι απλά keys ή primary keys;


θέλω να ελέγξω αν υπάρχει συνδυασμός με το ίδιο όνομα σε άλλη περιφέρεια...που αυτή τη δουλειά κάνει ουσιαστικά το primary key αλλά δεν ξέρω γιατί θέλει έξτρα έλεγχο...

την stored procedure τη γράφω με mysql.
όλα όσα αναφέρω ως keys είναι primary keys!
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.04 raring 3.8.0-33-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.5.0-43-generic
3 AMD Athlon 64 X2 Dual Core Processor 3800+ ‖ RAM 2002 MiB ‖
4 nVidia G86 [GeForce 8500 GT] [10de:0421] {nouveau}
5 eth0: Marvell 88E8053 PCI-E Gigabit Ethernet Controller [11ab:4362] (rev 19) ⋮ eth1: Marvell 88E8001 Gigabit Ethernet Controller [11ab:4320] (rev 13) ⋮ wlan0: 148f:2573 Ralink Technology, Corp. RT2501/RT2573 Wireless Adapter
P!nk
babeTUX
babeTUX
 
Δημοσιεύσεις: 101
Εγγραφή: 31 Οκτ 2008, 13:27
Εκτύπωση

Re: mysql ευρετήρια

Δημοσίευσηαπό Αποστόλης » 17 Δεκ 2010, 21:44

Σε αυτή την περίπτωση το ποιό σωστό θα ήταν να ορίσεις σαν primary key τον συνδυασμό των δύο πεδίων που αναφέρεις: όνομα συνδυασμού+όνομα περιφέρειας.
Αυτό μόνο εάν και εφόσον δεν θέλεις να υπάρχει δεύτερη φορά ο ίδιος συνδυασμός στην ίδια περιφέρεια.
Ετσι όπως το έχεις τώρα θα σου χτυπήσει γιατί ο συνδυασμός υπάρχει και είναι unique. Δηλαδή μπορεί να υπάρξει μόνο μια φορά. Είτε σε αυτή την περιφέρεια είτε σε κάποια άλλη (οποιαδήποτε).

Μια κύρια διαφορά ανάμεσα στον έλεγχο που κάνει το primary key και σε κάποιον έλεγχο που κάνεις εσύ είναι οτι το primary key κάνει έλεγχο μόνο για το συγκεκριμένο πεδίο. Αν η τιμή που προσπαθείς να περάσεις υπάρχει η MSQL χτυπάει DUPLICATE ENTRY FOR PRIMARY KEY κ.λ.π. κ.λ.π.
Αν η τιμή δεν υπάρχει τότε και αυτή και οτιδήποτε άλλο θα περάσει.
Ο έλεγχος όμως που κάνεις εσύ μπορεί να πάρει άπειρους παραμέτρους.
SELECT όνομα συνδυασμού,όνομα περιφέρειας FROM συνδυασμός WHERE όνομα συνδυασμού = " όνομα συνδυασμού" AND όνομα περιφέρειας = "όνομα περιφέρειας";
Τα AND μπορούν αν είναι ατελείωτα, να συνδυαστούν με CONCAT, OR, BETWEEN, NOT LIKE και τρέχα γύρευε. Ορεξη να έχεις να γράφεις...

stored procedure μέσα από MySQL shell;
Τζάμπα κόπος μου ακούγεται.
Γνώσεις ⇛ Linux:Μέτριο┃ Προγραμματισμός:Ναι ┃ Αγγλικά: Αρκετά Καλά
Λειτουργικό ⇛ Arch Linux 64bit ┃ Ubuntu Studio 10.4 64bit
Προδιαγραφές ⇛ HP Pavillion dv7 1199ev ┃ Intel 2 Core Duo T 9400, 2.53 Ghz ┃ 4GB ┃ NVIDIA GeForce 9600M GT ┃ Intel 82801I (ICH9 Family) HD Audio ┃ TFT 17" 1440x900
Αποστόλης
punkTUX
punkTUX
 
Δημοσιεύσεις: 170
Εγγραφή: 24 Ιουν 2009, 13:09
Εκτύπωση

Re: mysql ευρετήρια

Δημοσίευσηαπό P!nk » 17 Δεκ 2010, 22:19

Αποστόλης έγραψε:Σε αυτή την περίπτωση το ποιό σωστό θα ήταν να ορίσεις σαν primary key τον συνδυασμό των δύο πεδίων που αναφέρεις: όνομα συνδυασμού+όνομα περιφέρειας.
Αυτό μόνο εάν και εφόσον δεν θέλεις να υπάρχει δεύτερη φορά ο ίδιος συνδυασμός στην ίδια περιφέρεια.
Ετσι όπως το έχεις τώρα θα σου χτυπήσει γιατί ο συνδυασμός υπάρχει και είναι unique. Δηλαδή μπορεί να υπάρξει μόνο μια φορά. Είτε σε αυτή την περιφέρεια είτε σε κάποια άλλη (οποιαδήποτε).

Μια κύρια διαφορά ανάμεσα στον έλεγχο που κάνει το primary key και σε κάποιον έλεγχο που κάνεις εσύ είναι οτι το primary key κάνει έλεγχο μόνο για το συγκεκριμένο πεδίο. Αν η τιμή που προσπαθείς να περάσεις υπάρχει η MSQL χτυπάει DUPLICATE ENTRY FOR PRIMARY KEY κ.λ.π. κ.λ.π.
Αν η τιμή δεν υπάρχει τότε και αυτή και οτιδήποτε άλλο θα περάσει.
Ο έλεγχος όμως που κάνεις εσύ μπορεί να πάρει άπειρους παραμέτρους.
SELECT όνομα συνδυασμού,όνομα περιφέρειας FROM συνδυασμός WHERE όνομα συνδυασμού = " όνομα συνδυασμού" AND όνομα περιφέρειας = "όνομα περιφέρειας";
Τα AND μπορούν αν είναι ατελείωτα, να συνδυαστούν με CONCAT, OR, BETWEEN, NOT LIKE και τρέχα γύρευε. Ορεξη να έχεις να γράφεις...

stored procedure μέσα από MySQL shell;
Τζάμπα κόπος μου ακούγεται.


εργασία...τι να κάνω!!! :P σ'ευχαριστώ για την βοήθεια! :)
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.04 raring 3.8.0-33-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.5.0-43-generic
3 AMD Athlon 64 X2 Dual Core Processor 3800+ ‖ RAM 2002 MiB ‖
4 nVidia G86 [GeForce 8500 GT] [10de:0421] {nouveau}
5 eth0: Marvell 88E8053 PCI-E Gigabit Ethernet Controller [11ab:4362] (rev 19) ⋮ eth1: Marvell 88E8001 Gigabit Ethernet Controller [11ab:4320] (rev 13) ⋮ wlan0: 148f:2573 Ralink Technology, Corp. RT2501/RT2573 Wireless Adapter
P!nk
babeTUX
babeTUX
 
Δημοσιεύσεις: 101
Εγγραφή: 31 Οκτ 2008, 13:27
Εκτύπωση


Επιστροφή στο Εφαρμογές για Ανάπτυξη Λογισμικού