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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> странный AUTO_INCREMENT 
:(
    Опции темы
delphi_
Дата 26.4.2010, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



есть вот такая странная штука

вставляю в таблицу 10 строк из файла

Код

LOAD DATA INFILE 'C:/1.txt' INTO TABLE AUTO.TABLE1 FIELDS TERMINATED BY '||' (Manufacturer,Body_type,Model,Engine,Gearbox,Axle,Mileage); 


они добавляются.кроме этого там есть поле ID которое и  AUTO_INCREMENT
оно показывает в итоге 10,все верно...


но если добавить еще строки,причем неважно как-или опять LOAD DATA или руками INSERT, то ID=11 не будет ! вообще

нумерация начнется с 12.

вопрос-почему и как это убрать?
PM MAIL   Вверх
Akina
Дата 26.4.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Вопрос - ЗАЧЕМ это убирать?
Без вменяемого обоснования, что ИНАЧЕ НЕЛЬЗЯ - твой вопрос лишён смысла.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
delphi_
Дата 26.4.2010, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



чтобы "преподаватель"   не задавал вопросов в духе "почему порядок не правильный?"
спросил у двух знакомых прогеров-ниодин не смог помочь)
PM MAIL   Вверх
DimW
Дата 27.4.2010, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(delphi_ @  26.4.2010,  22:45 Найти цитируемый пост)
чтобы "преподаватель"   не задавал вопросов в духе "почему порядок не правильный?"

преподователь сто пудов хотел(хотя....), что бы вы ему объяснили почему так происходит, а не пытались на это повлиять.
PM MAIL ICQ   Вверх
Akina
Дата 27.4.2010, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(delphi_ @  26.4.2010,  23:45 Найти цитируемый пост)
чтобы "преподаватель"   не задавал вопросов в духе "почему порядок не правильный?"

Порядок... какой? блин, отправь преподавателя читать маны по тому, для чего существуют суррогатные ключи. Уникальность соблюдена? соблюдена... свободен. Нужен порядок? введи дополнительное поле и заполняй его последовательно. А автоинкрементный ключ оставь базе данных для её собственных нужд.

Добавлено через 1 минуту и 8 секунд
Цитата(DimW @  27.4.2010,  10:57 Найти цитируемый пост)
преподователь сто пудов хотел(хотя....), что бы вы ему объяснили почему так происходит

ага... перекопать исходный код сервера БД (если он вообще открытый) и найти, где програмисты допустили эту "фичу"?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DimW
Дата 27.4.2010, 10:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(Akina @  27.4.2010,  10:25 Найти цитируемый пост)
ага... перекопать исходный код сервера БД (если он вообще открытый)  

как всегда из крайности в крайность....  smile 
не нужно ничего перекапывать для того, что бы понять как пногопользовательская среда влияет на последовательность инкремента.

Цитата(Akina @  27.4.2010,  10:25 Найти цитируемый пост)
где програмисты допустили эту "фичу"? 

если все в действительности так, то думаю преподу будет достаточно аргумента, что это баг, но диагноз явно не впечатляет, без тест кейса выгрядит как подхваченная истерия.
PM MAIL ICQ   Вверх
Akina
Дата 27.4.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(DimW @  27.4.2010,  11:47 Найти цитируемый пост)
не нужно ничего перекапывать для того, что бы понять как пногопользовательская среда влияет на последовательность инкремента.

Да? просветишь? применительно к описанному выше однопользовательскому (по факту) режиму и наблюдаемому эффекту... насколько я знаю, такой вещи как резервирование автоинкремента ни одна СУБД не реализует, а другого вменяемого обоснования мне придумать не удалось... или ты о просто видимой разрывности автоинкремента в многосеансной среде?

Цитата(DimW @  27.4.2010,  11:47 Найти цитируемый пост)
если все в действительности так, то думаю преподу будет достаточно аргумента, что это баг

Я лично не вижу в принципе никаких оснований называть это багой. По описанным выше причинам. Вот если бы вычисляемое поле последовательной нумерации давало такой эффект - это и впрямь была бы бага.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
skyboy
Дата 27.4.2010, 11:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



причина может оказаться в последней строке исходного текстового файла, которая пустая.
PM MAIL   Вверх
DimW
Дата 27.4.2010, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(Akina @  27.4.2010,  11:33 Найти цитируемый пост)
Да? просветишь? 

еще раз - без тест кейса породолжение темы - пустомельство, я пас.

Цитата(Akina @  27.4.2010,  11:33 Найти цитируемый пост)
По описанным выше причинам.

ТС еще забыл дописать - "мамой клянусь так все и было".


Цитата(Akina @  27.4.2010,  11:33 Найти цитируемый пост)
Вот если бы вычисляемое поле последовательной нумерации давало такой эффект

это?:
Код

select max(id) + 1 from table;

Цитата(Akina @  27.4.2010,  11:33 Найти цитируемый пост)
это и впрямь была бы бага. 

для кого бага, а для кого вполне предсказуемый результат.
PM MAIL ICQ   Вверх
Akina
Дата 27.4.2010, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



нет, 
Код
insert into table (...) select/values (...);
update table set id=max(id)+1 where (...);


Добавлено через 1 минуту
или то же одним запросом, если СУБД позволяет


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DimW
Дата 27.4.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(Akina @  27.4.2010,  11:59 Найти цитируемый пост)
нет, 

пример несколько размазанный, если все же имелось ввиду:

Код

insert into table (id) (select max(id) + 1 from table)


или
Код

update table
set id = (select max(id) + 1 from table)
where ...


то последовательность явно будет нарушена при одновременном использовании, а рассматривать данный вариант для одного сеанса не имеет смысла.


PM MAIL ICQ   Вверх
Akina
Дата 27.4.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(DimW @  27.4.2010,  13:42 Найти цитируемый пост)
последовательность явно будет нарушена при одновременном использовании

Для сеанса - запросто. А для таблицы-то почему бы?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DimW
Дата 27.4.2010, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(Akina @  27.4.2010,  12:47 Найти цитируемый пост)
А для таблицы-то почему бы? 

максимальный id=100

сеанс 1:
insert...

сеанс 2:
insert...

сеанс 1:
commit;

сеанс 2:
commit;

в таблице две записи с полем id = 101, если поле id - primary key, то сеанс 2 отваливается по dup_val_on_index - что не правильно организационно.
PM MAIL ICQ   Вверх
Zloxa
Дата 27.4.2010, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



DimW, твой мозг вызжен версионниками.
На блокировочнике, при read commited второй insert встанет на блокировке до коммита первого.  
Попробовал на M$2к smile 
Для блокировочников тесткейс малость другой должен быть.
Какой, на вскидку щас не скажу.

хм.. тесткес у меня был такой
Код

create table test (id int);
begin transaction
insert into test select count(*) from test

сессия 2
Код

begin transaction
insert into test select count(*) from test
.....висить.




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 28.4.2010, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(Zloxa @  27.4.2010,  18:54 Найти цитируемый пост)
На блокировочнике, при read commited второй insert встанет на блокировке до коммита первого. 

теперь я понял почему последние 6 постов наша дикуссия с Akina, была подобна разговору глухого с немым.  smile 
неплохая статья On Transaction Isolation Levels, By Tom Kyte.
что прикольно, описано как уровни изоляции оракла отличаются от остальных СУБД.
Zloxa, спасибо за ценную инфу smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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