Comment puis-je définir un nombre maximum de lignes dans une table MySQL?
J'ai besoin de fixer une limite maximum de lignes dans ma table MySQL. La Documentation de nous dire que l'on peut utiliser à la suite de code SQL pour créer la table:
CREATE TABLE `table_with_limit`
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB MAX_ROWS=100000
Mais MAX_ROWS
propriété n'est pas une limite matérielle ("ne pas stocker plus de 100 000 lignes et supprimer les autres"), mais un indice pour le moteur de base de données de ce tableau ont AU MOINS 100 000 lignes.
Le seul moyen que je vois pour résoudre le problème est d'utiliser BEFORE INSERT
déclencheur qui va vérifier le nombre de lignes dans le tableau et de supprimer les anciennes lignes. Mais je suis assez sûr que c'est un énorme surchauffe :/
Une autre solution est de vider la table avec le script cron toutes les N minutes. C'est la manière la plus simple, mais encore faut-il un autre système à surveiller.
Quelqu'un connait une meilleure solution? 🙂
OriginalL'auteur WASD42 | 2011-11-08
Vous devez vous connecter pour publier un commentaire.
Essayer de faire une restriction sur l'ajout d'un nouvel enregistrement à une table. Générer une erreur lorsqu'un nouvel enregistrement est va être ajouté.
Noter, qu'à COMPTER de l'opération peut être lent sur de grandes tables InnoDb.
Sur MySQL 5.5, vous pouvez utiliser SIGNAL //RESIGNAL déclaration de lever une erreur.
OriginalL'auteur Devart
"horodatage" dans le passé.
lors de la "création" (mise à jour).
sélectionner/mise à jour rapide.
c'est logique. merci joe.
Wow, c'est tellement original, merci!
OriginalL'auteur joe
Il n'y a aucun moyen de limiter le nombre maximum de lignes de la table dans MySQL, sauf si vous écrivez un Déclencheur pour le faire.
OriginalL'auteur aleroot
Je suis juste une réponse sur le dessus de ma tête. Mon hypothèse, c'est que vous voulez quelque chose comme un "seau" où vous avez mis dans les dossiers, et que vous souhaitez vider avant qu'il frappe un certain nombre record de comptage.
Après une instruction insert, exécutez
SELECT LAST_INSERT_ID();
qui vous permet d'obtenir l'auto incrément d'un id d'enregistrement. Oui vous avez encore exécuter une requête supplémentaire, mais il sera faible à forte intensité de ressources. Une fois que vous atteignez un certain comte, tronquer la table et réinitialiser l'auto incrément id.Sinon, vous ne pouvez pas avoir un "plafonné" table dans mysql, que vous avez d'avoir des pré-actions définies comme (n'avons-nous pas allowe l'enregistrement, ne nous tronquer la table? etc).
droit... fait que j'ai mal compris? Je pensais que vous vouliez le "vide", la table lorsque la limite a été touché? Non?
Non, j'ai besoin de supprimer obsolète (plus âgés) des lignes de la table, pas tous d'entre eux 🙂
OriginalL'auteur Jakub