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

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

Δημοσ.

Μπορουμε να φτιαξουμε table στην mysql το οποιο θα παιρνει μεχρι N rows; Και οταν φτασει τα Ν rows, να διαγραφει το πρωτο και να βαζει το καινουριο στο τελος (ή το αναποδο)

Δημοσ.

Καλημέρα !

Αυτή η δυνατότητα υπάρχει εγγενώς στις σχετικά νέες εκδόσεις της MySQL. Δηλαδή η ίδια η βάση δεδομένων σου δίνει τη δυνατότητα να εισάγεις μέχρι N εγγραφές. Αυτό όμως δεν πάει να πει ότι άμα φτάσεις τις Ν εγγραφές θα σου απαγορεύσει νέες εισαγωγές. Απλά ό,τι εισάγεται μετά την υπέρβαση αυτού του ορίου, σβήνεται.
Θα φτιάξουμε ένα πίνακα που κάθε εγγραφή απλά θα είναι ένας ακέραιος και θα έχει το πολύ εκατό ας πούμε εγγραφές :


CREATE TABLE `pinakaki`
   `id` int(5) DEFAULT NULL
) ENGINE=InnoDB MAX_ROWS=100

Να είστε καλά,
Ο Άσπρος Γάτος

Δημοσ.

Μπορουμε να φτιαξουμε table στην mysql το οποιο θα παιρνει μεχρι N rows; Και οταν φτασει τα Ν rows, να διαγραφει το πρωτο και να βαζει το καινουριο στο τελος (ή το αναποδο)

 

 

Πρόσθεσε τον table το field row_index: 

CREATE TABLE your_table (
  some_field char(12),
  row_index int(10) unsigned not null
);

Κάνε initalize το your_table inserting τις rows που χρειάζεσαι ( 4 στο παράδειγμα):

INSERT INTO your_table (row_index) VALUES(1),(2),(3),(4);
 
Για να προσθέσεις row αντί γιά insert κάνεις πάντα update όπως εδώ:
UPDATE your_table SET some_field='abc1', row_index=row_index+4 ORDER BY row_index LIMIT 1;
 
Δες το αποτέλεσμα:
 
UPDATE your_table SET some_field='abc2', row_index=row_index+4 ORDER BY row_index LIMIT 1;
UPDATE your_table SET some_field='abc3', row_index=row_index+4 ORDER BY row_index LIMIT 1;
UPDATE your_table SET some_field='abc4', row_index=row_index+4 ORDER BY row_index LIMIT 1;
UPDATE your_table SET some_field='abc5', row_index=row_index+4 ORDER BY row_index LIMIT 1;
select * from your_table;

Output:

 

mysql> select * from your_table;
+------------+-----------+
| some_field | row_index |
+------------+-----------+
| abc5       |         9 |
| abc2       |         6 |
| abc3       |         7 |
| abc4       |         8 |
+------------+-----------+
4 rows in set (0.00 sec)
 
Δημοσ.

Παίζει να κάνεις και ένα trigger που θα σβήνει το πρώτο row πριν οποιοδήποτε insert αν count rows > X

CREATE TRIGGER keep100rows BEFORE INSERT ON myTable
FOR EACH ROW
BEGIN
    IF (SELECT COUNT(*) FROM myTable) = 100 THEN
        DELETE FROM myTable
        ORDER BY id 
        LIMIT 1;
    END IF;    
END;

Το ordering θεωρώ ότι το κάνεις με στήλη id αλλά whatever.

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...