Модераторы: Akella

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> что будет когда достигнет макс. Integer? 
:(
    Опции темы
Aprol
Дата 13.8.2007, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Что произойдет когда значение поля integer достигнет максимума?
А если это первичный ключ и значение маскимально для этого типа данных, что произойдет?
PM MAIL   Вверх
chand0s
Дата 13.8.2007, 05:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 19.2.2007

Репутация: 1
Всего: 3



При попытке присвоить полю типа int значение вылезающее за диапазон сервер выплюнет ошибку:
Код

SQL Message : -802
Arithmetic overflow or division by zero has occurred.

PM MAIL   Вверх
Aprol
Дата 13.8.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



И что делать то  тогда?
PM MAIL   Вверх
ksili
Дата 13.8.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



А что, реально боишься, что значение ключа превысит 2^64?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
chand0s
Дата 13.8.2007, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 19.2.2007

Репутация: 1
Всего: 3



Цитата(Aprol @ 13.8.2007,  07:35)
И что делать то  тогда?

Читать литературу.
У Вас действительно возникла такая проблема?
PM MAIL   Вверх
Aprol
Дата 14.8.2007, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Нет. Это так интересно стало. Ведь есть базы где в день появляется несколько сотен записей и удаляется столько же.
PM MAIL   Вверх
Aprol
Дата 14.8.2007, 03:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



2^64 ?? возможно я дезинформирован:
В InterBase есть следующие основные категории типов данных: символьные, целые, дробные (с плавающей точкой), время и дата.Начнем подробный разбор.

Название типа данных Размер в байтах Диапазон значений/Точность Дополнительно 
INTEGER 4 от -2147483648 до 2147483648 Целое знаковое 
SMALLINT 2 от -327678 до 32767 Целовое знаковое 
DECIMAL(precision,scale) Переменная длина. 2,4 или 8 байт Точность(precision) от 1 до 18 ( Точность - это максимальное количество цифр ). Количество(scale) цифр после десятичной точки от 1 до 18 Масштабируемое целое ( десятичное ) 
NUMERIC(precision,scale) Переменная длина. 2,4 или 8 байт Точность(precision) от 1 до 18 ( Точность - это максимальное количество цифр ). Количество(scale) цифр после десятичной точки от 1 до 18 Масштабируемое целое ( десятичное ) 
DOUBLE PRECISION 8 от 2.225x10-308 до 1.797x10308 Дробное 
FLOAT 4 от 1.175 x 10–38 до 3.402х1038 Дробное 
CHAR(n) n - символов от 1 до 32767 Строка фиксированной длины (набор символов фиксированной длины). Альтернативное название - CHARACTER. 
VARCHAR(n) n - символов от 1 до 32765 Строка переменной длины (набор символов переменной длины).Альтернативное название - CHARACTER VARYING, CHAR VARYING. 
DATE 8 От 1 Января 100 нашей эры to 29 Февраля 32768 нашей эры. Дата 
TIME 8 0:00 AM-23:59.9999 PM Время 
TIMESTAMP 8 От 1 Января 100 нашей эры to 29 Февраля 32768 нашей эры. Время и дата 
BLOB Переменная длина  Динамически расширяемый тип данных для хранения данных большого размера.Например, графики,текста,звука. 

PM MAIL   Вверх
smartov
Дата 14.8.2007, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: нет
Всего: 259



Цитата(Aprol @  13.8.2007,  08:35 Найти цитируемый пост)
И что делать то  тогда? 

Ну если у тебя количество записей в таблице перевалило за эти отведенные два с хвостиком миллиарда, и оптимизировать базу действительно некуда, то переведешь тип поля в BIGINT и возрадуешься smile

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

A large integer. The signed range is -9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615. 

Девять секстиллионов записей осилишь (это еще если со знаком, а без знака так вообщее 18)? smile (Если ты ответил да, то база данных ответит нет smile )

Это сообщение отредактировал(а) smartov - 14.8.2007, 09:15
PM MAIL   Вверх
Aprol
Дата 15.8.2007, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Лучше сразу перевести все первичные ключи в large integer?

Добавлено через 2 минуты и 1 секунду
в ibexpert нет этого типа данных?
Ты про interbase писал?
 smile 
нужно что ли через sql изменять...

Добавлено через 5 минут и 14 секунд
Стоп а как мне тогда в приложении использовать эти числа delphi такие числа не осилит без всяких хитростей которых я не знаю :(
PM MAIL   Вверх
ksili
Дата 15.8.2007, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Какой large integer?

INTEGER - 4-байтовой целое. В диалекте 1 генераторы генерируют значения типа INTEGER. Вы можете хранить эти числа в BIGINT без преобразования.

BIGINT - 8-байтовое целое. В диалекте 3 генераторами генерируются числа типа BIGINT.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Aprol
Дата 15.8.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Цитата(ksili @ 15.8.2007,  06:39)
Какой large integer?

INTEGER - 4-байтовой целое. В диалекте 1 генераторы генерируют значения типа INTEGER. Вы можете хранить эти числа в BIGINT без преобразования.

BIGINT - 8-байтовое целое. В диалекте 3 генераторами генерируются числа типа BIGINT.

по понятнее можешь ? smile 
Генераторы то может и генерируют а вот поле тип данных то другой...
PM MAIL   Вверх
ksili
Дата 15.8.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Ты же сам говоришь "первичные ключи". А их обычно генераторы и генерят

Добавлено через 2 минуты и 52 секунды
Если вдруг когда-то тебе не хватит 2^32 (INTEGER), преобразуешь его без проблем к BIGINT  и будешь работать дальше

Цитата(Aprol @  14.8.2007,  08:16 Найти цитируемый пост)
в день появляется несколько сотен записей и удаляется столько же

Это вообще-то по сравнению с 2^32 ОЧЕНЬ мало, посчитай сам если не веришь, на сколько лет хватит integer'a


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Aprol
Дата 15.8.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Вот сейчас попробывал изменить тип данных и облом!
Так как есть внешние ключи. Получается в одной таблице один тип данных  во второй другой.
Решение убрать связь,и зменить тип и снова сделать связь?
PM MAIL   Вверх
ksili
Дата 15.8.2007, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(Aprol @  15.8.2007,  16:42 Найти цитируемый пост)
Решение убрать связь,и зменить тип и снова сделать связь?

Попробуй так и сделать. Проблема конечно из=за связей. Сам INTEGER должен преобразовываться к BIGINT без проблем

Добавлено через 5 минут и 41 секунду
Если таких связей много можно написать скрипт, в котором сначала дропаешь внешние ключи, потом преобразуешь типы нужных полей, и наконец заново создаешь ключи.

А потом 15 лет хранишь в укромном месте этот скрипт, чтобы в критический момент достать его и использовать  smile 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Aprol
Дата 15.8.2007, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



понятно спасибо!
А если сразу поставить bigint, на много возрастет размер базы данных?
PM MAIL   Вверх
ksili
Дата 15.8.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Согласись, это зависит от того, сколько у тебя таких ключей, и сколько их относительно других полей. Так что попробуй, истина где-то там, на твоём компе.

Я думаю, размер не сильно возрастёт


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Aprol
Дата 15.8.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Нет нужно тут разобраться!
В одной базе все ОК! даже внешние ключи переводит в bigint, в другой где как раз  ин нужно это такая ошибка вылазит:

Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
action cancelled by trigger (1) to preserve data integrity.
Cannot update index segment used by an Integrity Constraint.

PM MAIL   Вверх
chand0s
Дата 15.8.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 19.2.2007

Репутация: 1
Всего: 3



деактивируй все триггеры и индексы и попробуй снова.

вообще как все происходит
1) при вставке вызываются триггеры before insert
2) триггер через GEN_ID(SOME_GEN, 1) получает новое значение генератора
3) пытается "положить" значение генератора в нужное поле 
new.id = gen_id(some_gen, 1)
4) если тип поля - int, а значение генератора уже "не вписывается" в int - будет выброшено исключение и текущая операция будет откачена.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.