Как я могу использовать последовательности в SQLite?

I ' m написать веб-приложение на основе PHP, которое должно работать с несколькими системами баз данных. Наиболее важными являются MySQL и SQLite, но PostgreSQL и другие тоже подойдут. Для этого я стараюсь использовать максимально переносимый SQL. Там, где это невозможно, я определил несколько мета-слов в моих запросах, которые обрабатываются моим уровнем БД и конвертируются в специфичные для платформы команды SQL.

Сейчас я пытаюсь добавить поддержку последовательностей. Каждая СУБД обрабатывает последовательности по-разному, нет единого способа записать их на SQL. Я прочитал и понял, как PostgreSQL делает это . Я нашел интересное решение для MySQL , которое использует таблицы MyISAM, чтобы избежать ограничений изоляции транзакции. В конце концов, последовательности не откатываются с транзакцией, в которой они используются, и это именно то, что я хочу. Последовательности должны быть безопасными для многих пользователей.

Я не нашел решения для SQLite. В нем отсутствует встроенная поддержка последовательностей. Он не предоставляет способов хранения данных вне текущей транзакции. Моя текущая реализация - заблокировать таблицу достаточно далеко, чтобы выполнить SELECT MAX (...) и использовать это значение. Но я хочу полностью от этого избавиться. В SQLite этот подход требует блокировки всей базы данных!

Кто-нибудь знает решение этой проблемы с помощью SQLite?

7
задан ygoe 19 December 2010 в 20:42
поделиться