Nous utilisons beaucoup MySQL avec le moteur de stockage InnoDB et les transactions, et nous avons rencontré un problème: nous avons besoin d'une manière sympa d'émuler les SEQUENCES d'Oracle dans MySQL. Les exigences sont les suivantes: - soutien concurrency - la sécurité des transactions - performance maximum (sens réduisant au minimum les verrous et les blocages)Emulation d'une SEQUENCE transactionnelle dans MySQL
Nous ne se soucient pas si certaines valeurs ne seront pas utilisées, à savoir les lacunes dans l'ordre sont ok. Il existe un moyen facile d'archiver cela en créant une table InnoDB séparée avec un compteur, mais cela signifie qu'il participera à la transaction et introduira des verrous et des attentes. Je pense à essayer une table MyISAM avec des verrous manuels, d'autres idées ou bonnes pratiques?
Merci - c'est plus ou moins ce que nous sommes venus après tout - procédure stockée qui fait presque exactement cela. –
Si cet enregistrement n'existe pas, utilisez cette requête. 'INSERT INTO séquence (seq_name, seq_current) VALEURS ('foo', (@next: = 1)) SUR LA CLÉ DUPLICATE MISE À JOUR seq_current = (@next: = seq_current + 1);' alors appeler 'SELECT @next;' – iwat
vous pouvez combiner le commentaire de Iwat avec la réponse de qu1j0t3: 'INSERT INTO sequences2 (seq_name, seq_current) VALUES ('foo', LAST_INSERT_ID (1)) Duplicate KEY UPDATE seq_current = LAST_INSERT_ID (seq_current + 1);' puis appelez 'SELECT LAST_INSERT_ID();', ou si vous utilisez un pilote d'application, utilisez l'appel intégré auto-increment (par exemple 'Statement # getGeneratedKeys' dans jdbc) – Alden