|
значение автоинкримента
|
|||
---|---|---|---|
#18+
Парни привет! БД SQLITE, делаю INSERT. Можно ли уже в запросе узнать значение поля автоинкримента и продублировать его в одной из ячеек, например? br, grio. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2010, 20:29 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
Без триггера наврядли. А вот есть ли в SQLLITE триггеры - не уверен. Да и потом, а зачем сразу, если потом достаточно один UPDATE сделать. Модератор: Тема перенесена из форума "Вопрос-Ответ". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2010, 23:04 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2010, 10:25 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2010, 10:33 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
Dmitry Arefiev, почти... но не то. я имел ввиду такой вариант использования: Код: plaintext
Только нужно получить не предыдущее, а текущее значение. Типа current_insert_rowid(), но этой функции, к сожалению пока нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2010, 19:52 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
Думаю подобная функция нарушает правила нормализации реляционной БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2010, 21:54 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
grioDmitry Arefiev, почти... но не то. я имел ввиду такой вариант использования: Код: plaintext
Только нужно получить не предыдущее, а текущее значение. Типа current_insert_rowid(), но этой функции, к сожалению пока нет. А постом выше я что написала? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2010, 20:53 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
ЯИра, к сожалению, не годится твой вариант тоже. Ты же не знаешь наверняка что значение будет всегда на единицу больше. Потому что автоинкримент может заполнять пустоты в середине списка, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2010, 23:36 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
grio, а ты пробывал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2010, 02:17 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
ЯИра, Достаточно проблематично сэмулировать ситуацию, когда автоинкримент достиг максимального значения. Однако, в принципе, такое возможно. И тогда твой код начнет вести себя весьма странно. Если не заморачиваться возможными последствиями, то твое решение вполне годится, как, например, временное. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2010, 12:28 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
grioЯИра, к сожалению, не годится твой вариант тоже. Ты же не знаешь наверняка что значение будет всегда на единицу больше. Потому что автоинкримент может заполнять пустоты в середине списка, например. Не выдумывайте. AUTOINCREMENT всегда на единицу больше предыдущего максимального значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2010, 16:00 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
MBG, Тогда позвольте спросить, что происходит, когда автоинкримент достигает порога для указанного типа данных INTEGER или REAL? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2010, 13:42 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
Простой эксперимент показывает, что будет ошибка при вставке новой записи SQLITE_FULL в доке написано автор If no ROWID is specified on the insert, or if the specified ROWID has a value of NULL, then an appropriate ROWID is created automatically. The usual algorithm is to give the newly created row a ROWID that is one larger than the largest ROWID in the table prior to the insert. If the table is initially empty, then a ROWID of 1 is used. If the largest ROWID is equal to the largest possible integer (9223372036854775807) then the database engine starts picking candidate ROWIDs at random until it finds one that is not previously used. If no unused ROWID can be found after a reasonable number of attempts, the insert operation fails with an SQLITE_FULL error. но на деле не ищется "пропущенное значение" ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2010, 14:21 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
ЯИраПростой эксперимент показывает, что будет ошибка при вставке новой записи SQLITE_FULL в доке написано автор If no ROWID is specified on the insert, or if the specified ROWID has a value of NULL, then an appropriate ROWID is created automatically. The usual algorithm is to give the newly created row a ROWID that is one larger than the largest ROWID in the table prior to the insert. If the table is initially empty, then a ROWID of 1 is used. If the largest ROWID is equal to the largest possible integer (9223372036854775807) then the database engine starts picking candidate ROWIDs at random until it finds one that is not previously used. If no unused ROWID can be found after a reasonable number of attempts, the insert operation fails with an SQLITE_FULL error. но на деле не ищется "пропущенное значение" Вы в документации всегда только первый абзац читаете?.. Читайте дальше, там есть отдельная секция про AUTOINCREMENT. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2010, 18:54 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
Я плохо язык знаю, не очень поняла, что там дальше написано, но судя по тому, как работает движок базы, при максимальном значении integer в sqlite_seqгence, вставка новой записи приводит к ошибке, а не к поиску незанятых значений(когда пробывала, добавляла в таблицу одну запись, апдейтила sqlite_seqгence до максимального значения по документации и вновь добавляла запись) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2010, 23:20 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
ЯИраЯ плохо язык знаю, не очень поняла, что там дальше написано, но судя по тому, как работает движок базы, при максимальном значении integer в sqlite_seqгence, вставка новой записи приводит к ошибке, а не к поиску незанятых значений(когда пробывала, добавляла в таблицу одну запись, апдейтила sqlite_seqгence до максимального значения по документации и вновь добавляла запись)Берешься за компилятор - учи английский. Аксиома такая. Если поле объявлено как AUTOINCREMENT, то заполнение дырок в нумерации строк запрещено. Следующее значение AUTOINCREMENT поля всегда на единицу больше чем максимальное значание этого поля в существующей или когда-то сущестовавшей строке. Всё. Все что написано ранее про заполнение дырок в порядке нумерования не имеет никакой практической пользы. Это все внутренние дела базы которые вообще-то не должны были быть описаны в руководстве по SQL диалекту. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2010, 00:45 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
White Owl, спасибо, буду знать! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2010, 01:45 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
White Owl[quot ЯИра] Все что написано ранее про заполнение дырок в порядке нумерования не имеет никакой практической пользы. Это все внутренние дела базы которые вообще-то не должны были быть описаны в руководстве по SQL диалекту. Имеет оно практическое значение - если не объявить ключевое слово AUTOINCREMENT для ключа, то последовательность ключей станет немонотонная. На практике этого поведения стоит избегать, но оно может быть необходимо для гигантских разреженных таблиц, когда заведомо известно, что идентификаторов может не хватить. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2010, 11:50 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
Для меня теперь все прояснилось с автоинкриментом. Спасибо, парни, спасибо, ЯИра, твой вариант запроса беру на вооружение ) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2010, 15:48 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
MBGИмеет оно практическое значение - если не объявить ключевое слово AUTOINCREMENT для ключа, то последовательность ключей станет немонотонная.Какая последовательность? Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2010, 17:39 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
White OwlMBGИмеет оно практическое значение - если не объявить ключевое слово AUTOINCREMENT для ключа, то последовательность ключей станет немонотонная.Какая последовательность? Код: plaintext
Похоже, вы хорошо отпраздновали 1-е мая :-) Все вы перепутали - PRIMARY KEY генерируется автоматически, по вышеназванному алгоритму. Ключевое слово AUTOINCREMENT изменяет алгоритм генерации. И вручную задавать PK вовсе нет необходимости: Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2010, 18:02 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
MBGПохоже, вы хорошо отпраздновали 1-е мая :-)Я один человек а не группа товарищей. И нет, я не праздновал, первого и второго мая я сочинения писал. MBGИ вручную задавать PK вовсе нет необходимости: Код: plaintext 1. 2. 3. 4. 5. 6.
Впрочем, это еще одна уникальная особенность SQLite :( В других базах значение первичного ключа должно быть задано либо клиентом, либо через какой-либо вариант вычисляемого выражения. Простое объявление поля первичным ключом обычно не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2010, 18:13 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
на кой черт он тогда называется автоинкрементом если все равно лепишь вот такие конструкции? Код: plaintext
автоинкремент по логике вообще не должен в запросе учавствовать, все, мы вообще должны забыть про него. Это питомец самой таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2010, 19:07 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
OracleLoverна кой черт он тогда называется автоинкрементом если все равно лепишь вот такие конструкции? Код: plaintext
автоинкремент по логике вообще не должен в запросе учавствовать, все, мы вообще должны забыть про него. Это питомец самой таблицы.О господи! Читать букварь! Срочно читать букварь! http://sql.ru/docs/sql/u_sql/ch15.shtml#15.4 И привыкать перечислять поля таблицы в которые делается вставка. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2010, 19:22 |
|
значение автоинкримента
|
|||
---|---|---|---|
#18+
White OwlOracleLoverна кой черт он тогда называется автоинкрементом если все равно лепишь вот такие конструкции? Код: plaintext
автоинкремент по логике вообще не должен в запросе учавствовать, все, мы вообще должны забыть про него. Это питомец самой таблицы.О господи! Читать букварь! Срочно читать букварь! http://sql.ru/docs/sql/u_sql/ch15.shtml#15.4 И привыкать перечислять поля таблицы в которые делается вставка. спасибо :), только это ни я! это ЯИра напесала - я с горяча и подумал что так работает ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2010, 10:03 |
|
|
start [/forum/topic.php?fid=54&msg=36611895&tid=2009326]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 179ms |
0 / 0 |