Я пишу веб-приложение на основе PHP, которое должно работать с несколькими системами баз данных. Наиболее важными являются MySQL и SQLite, но PostgreSQL и другие тоже подойдут. Для этого я стараюсь использовать максимально переносимый SQL. Там, где это невозможно, я определил некоторые мета-слова в своих запросах, которые обрабатываются моим уровнем БД и преобразуются в специфичные для платформы команды SQL.
Я сейчас пытаюсь добавить поддержку последовательностей. Каждая СУБД обрабатывает последовательности по-разному, нет единого способа записать их в SQL. Я прочитал и понял, как PostgreSQL делает это . Я нашел интересное решение для MySQL , которое использует таблицы MyISAM, чтобы обойти ограничения изоляции транзакции. В конце концов, последовательности не откатываются с транзакцией, в которой они используются, и это именно то, что я хочу. Предполагается, что последовательности должны быть многопользовательскими.
Сейчас я не нашел решения для SQLite. В нем отсутствует встроенная поддержка последовательности. Он не предоставляет способов хранения данных вне выполняемой транзакции. Моя текущая реализация заключается в блокировке таблицы достаточно далеко, чтобы выполнить SELECT MAX (...) и использовать это значение. Но я хочу полностью избавиться от этого. В SQLite этот подход требует блокировки всей базы данных!
Кто-нибудь знает решение для этого с SQLite?