nesco писал(а):
я ничего против rowid не имею.
А что можно против него иметь, если это самый главный компонент в любой БД ?

А то, что в SQLite можно к нему обратиться "напрямую", а не только через <имя>, определенное словосочетанием INTEGER PRIMARY KEY, только один из плюсов SQLite.
nesco, дальше не для тебя, а для начинающих применять SQLite в своих разработках.

======================================================
Создание таблицы для SQLite подобным выражением:
это, как говорит
nesco, полный пипец.
И если ещё на
AUTOINCREMENT можно закрыть глаза, то
varchar(64) в SQLite полный абсурд.
Почему ?
Потому, что в начале каждой записи(строки)
(ГРУБО!)SQLite кодирует и записывает служебную информацию:код таблицы в БД, Номер строки, смещение начала данных а строке, фактические размеры данных каждой колонки и т.д, поэтому данные в записи идут без разделителей.
И только поэтому, например, запрос:
SELECT * FROM tab WHERE name='Вася'; будет выполнен намного быстрее, чем
SELECT * FROM tab WHERE name LIKE '%Вася%'; (тут и такие шедевры мелькали

) потому, что
в первом случае перебирается только служебная информация записи и ищется - где name имеет длину в четыре знака и только потом сравнивается,
во втором случае перебираются и сравниваются все записи таблицы + обида на весь мир с криком "Тормозит!".