Maison >base de données >tutoriel mysql >Comment limiter efficacement le nombre de lignes dans les tables MySQL au-delà de l'indice MAX_ROWS ?
Limiter le nombre de lignes dans les tables MySQL : au-delà de l'indice MAX_ROWS
Bien que MySQL permette de spécifier un paramètre MAX_ROWS lors de la création de tables, il sert de simple suggestion pour le moteur de base de données. Les tableaux peuvent dépasser cette limite, la rendant inefficace en tant que plafond absolu du nombre de lignes.
Pour une véritable application d'un nombre maximum de lignes, des approches alternatives sont nécessaires. L'une de ces méthodes consiste à créer un déclencheur BEFORE INSERT qui vérifie le nombre de lignes actuel dans le tableau :
DELIMITER $$ CREATE TRIGGER trigger1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN SELECT COUNT(*) INTO @cnt FROM table1; IF @cnt >= 25 THEN CALL sth(); -- raise an error END IF; END $$ DELIMITER ;
Ce déclencheur évalue le nombre de lignes du tableau avant d'insérer une nouvelle ligne. Si le nombre atteint ou dépasse une limite prédéfinie (par exemple, 25), cela déclenche une erreur, empêchant ainsi l'insertion.
Cependant, cette approche peut introduire des pénalités de performances, en particulier pour les grandes tables, car l'opération COUNT peut être coûteux en calcul.
MySQL 5.5 introduit les instructions SIGNAL // RESIGNAL comme un autre moyen de générer des erreurs. Cela peut être incorporé dans le déclencheur comme suit :
CREATE TRIGGER trigger1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN IF 25 <= ROW_COUNT() THEN SIGNAL SQLSTATE '23000' SET MESSAGE_TEXT = 'Table size limit reached.'; // Raise an error END IF; END
Cette technique offre des performances améliorées en tirant parti de la fonction COUNT(*) optimisée sur les tables InnoDb, améliorant ainsi l'efficacité globale du mécanisme d'application du nombre de lignes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!