Вверх ↑
Ответов: 16884
Рейтинг: 1239
#1: 2011-10-11 12:01:03 ЛС | профиль | цитата
nesco писал(а):
я ничего против rowid не имею.
А что можно против него иметь, если это самый главный компонент в любой БД ? А то, что в SQLite можно к нему обратиться "напрямую", а не только через <имя>, определенное словосочетанием INTEGER PRIMARY KEY, только один из плюсов SQLite.
nesco, дальше не для тебя, а для начинающих применять SQLite в своих разработках.
======================================================
Создание таблицы для SQLite подобным выражением:
CREATE TABLE elements(id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(64),info varchar(64),tab int,pos int,hash varchar(32))
это, как говорит nesco, полный пипец.
И если ещё на AUTOINCREMENT можно закрыть глаза, то varchar(64) в SQLite полный абсурд.

типы данных в SQLite. Подробно здесь-> [url
http://xbb.uz/db/Tipy-dannyh-v-SQLite-versii-3[/url]]Чтобы избежать путаницы для типов данных полей таблиц лучше использовать базовые типы данных SQLite, которых всего четыре.

INTEGER - Числовой тип данных (целые положительные или отрицательные числа).
для компактности SQLite автоматически изменяет размер данного типа данных в зависимости от значения данных.

REAL - Числовой тип данных имеющий размер 8 байтов и может хранить как целые, так и дробные числа.

TEXT - Текстовый тип данных который может хранить текстовые строки произвольной длины в кодировке UTF-8 или UTF-16. Максимальная длина строки для данного типа данных не лимитирована. Этот же тип данных используется для хранения даты и времени (в символьном отображении).

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