[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SQLite2
Wolfix
Здравствуйте, уважаемые коллеги! Подскажите пожалуйста, как решить проблему с SQLite? Проблема заключается в том, что в отличии от привычной мне MySQL - в поле "auto_increment", новая запись "id" появляется не какв MySQL, а основываясь на порядковом номере последней имеющейся записи! Т.е. например, была строка id=10, после её удаления - последняя строка id будет =9, следующая добавляемая строка будет снова id=10... Как этого избежать?

P.S. Решение типа: "используй MySQL" - не подходят, интересует именно SQLite и именно версии 2 (версия БД, а не библиотеки).



Спустя 12 минут, 20 секунд (25.12.2008 - 20:17) kirik написал(а):
Это фишка SQLLite. Тамже есть инфа, как от этого избавиться.

Цитата
To create keys that are unique over the lifetime of the table, add the AUTOINCREMENT keyword to the INTEGER PRIMARY KEY  declaration.


Юзайте гугл, друзья, не даром на него просажено столько времени и денег =)

Спустя 47 минут, 23 секунды (25.12.2008 - 21:05) Wolfix написал(а):
С автоинкрементом вроде бы разобрался, спасибо г-ну kirik! Возникли ещё вопросы не совсем по теме, но близкие к ней... Из написанного здесь:
Скрытый текст
http://sb-news.net/sqlite.php?page=6#q1
- следует, что одна таблица может одновременно содержать до 9223372036854775807 строк (и уникальных id, соответственно). При этом, поле id - имеет тип INTEGER, который в свою очередь имеет размер 8 байт, т.е. 99 999 999 - максимально возможное число... И при установке ключа AUTOINCREMENT, не случиться ли такое, что запись №100 000 000 вызовет тотальный глюк системы? Не хотелось бы через 2-3 года понять тот факт, что база накрылась из-за собственной не предусмотрительности...

И ещё вопросик: где можно найти толковую документацию по SQLite3 на русском? Google и пр. - ничего не дали (по крайней мере на Русском), а выяснить преимущества 3ей версии - очень хочется!

Всем ещё раз спасибо!

Спустя 41 минута, 52 секунды (25.12.2008 - 21:47) kirik написал(а):
Вы считаете что у вас будет > 99 миллионов записей через 2 года? я - нет. Простая арифметика - 99.999.999 / 365 * 3 / 24 / 60 / 60 = ~ 1 запись в секунду каждую секунду в течении 3х лет.. Ваш ресурс будет на это способен?

Про различия ничего не скажу, ибо никогда не юзал SQLLite.
По теме.. нужно подтянуть английский до уровня читаю-понимаю. Это очень вам поможет в дальнейше жизни программиста (и не только) =)

UPD. тут инфа, тут перевод.

Спустя 40 минут, 5 секунд (25.12.2008 - 22:27) Wolfix написал(а):
У меня английский на очень высоком уровне в плане "разговорный", "слушаю-пониаю" (например песню по радио) и тех. английский. А вот с переводом тех. статей - действительно сложно, особенно если статья о том, о чем сам мало догадываешься... user posted image

Спустя 12 часов, 18 минут, 23 секунды (26.12.2008 - 10:45) sergeiss написал(а):
Цитата (Wolfix @ 25.12.2008 - 21:05)
При этом, поле id - имеет тип INTEGER, который в свою очередь имеет размер 8 байт, т.е. 99 999 999 - максимально возможное число... И при установке ключа AUTOINCREMENT, не случиться ли такое, что запись №100 000 000 вызовет тотальный глюк системы? Не хотелось бы через 2-3 года понять тот факт, что база накрылась из-за собственной не предусмотрительности...

Извини, но ты неправильно считаешь smile.gif

8 байт - это в ДВОИЧНОМ виде. А не так, как ты посчитал. А в восьми байтах в двоичном формате, да в знаковом виде, получим как раз число 9223372036854775807...

Для тех, кто мне не верит smile.gif, даю алгоритм быстрой проверки:
1. Вызвать Калькулятор из Винды.
2. Переключиться в инженерный вид.
3. Включить режим HEX.
4. Ввести 16 раз F, т.е. 8 полных байт, заполненных единицами.
5. Переключиться в режим DEC.
6. Полученное число разделить на 2.

Сравнить полученный результат с искомым 9223372036854775807 smile.gif

Вывод: не парься, и смело используй INTEGER для своего ID.

И что касается английского. У тебя уже есть неплохая база, разберешься и с техническим переводом. Это, как раз, легче устной речи.

Спустя 42 минуты, 20 секунд (26.12.2008 - 11:27) Sylex написал(а):
8 байт = 8 * 8 = 64 бит (в 1 байте 8 бит)
2 в 64 степени = 18446744073709551616
т.к. число знаковое делим на 2:
9223372036854775808

т.е. от -9223372036854775808 до 9223372036854775807 (нолик не забываем)

type BIGINT

sergeiss, ты запутал людей 16-ной системой счисления smile.gif

Спустя 9 минут, 23 секунды (26.12.2008 - 11:37) sergeiss написал(а):
Цитата (Sylex @ 26.12.2008 - 11:27)
sergeiss, ты запутал людей 16-ной системой счисления smile.gif

Ни разу! smile.gif Я просто показал путь, как быстро проверить это. Вместо того, чтобы вычислять вручную (2 в 64 степени), я предложил сделать это на калькуляторе.
Или ты тоже там же считал, а не вручную? tongue.gif

Спустя 1 час, 53 минуты, 6 секунд (26.12.2008 - 13:30) Alchemist написал(а):
А вручную - это на пальцах что ли ? smile.gif
Дикие люди - дети гор... Такие примеры давно пора в уме решать smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.