Легенда:
   новое сообщение
    закрытая нитка
    новое сообщение
    в закрытой нитке
    старое сообщение
         
		 | 
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
 - Новичкам также крайне полезно ознакомиться с данным документом.
   
  | 
Можно, как тебе предложили, самому бизнес логику...  24.12.04 10:49  Число просмотров: 2717
 Автор: paganoid Статус: Member
 | 
 
> в сабже есть опция у числового столбца, зовется > auto_increment, он гад постоянно увеличивается и даже если > удалить из таблицы запись с максимальным значением такого > столбаца и потом заинсертить новую, то следующее значение > будет все равно на 1 больше,чем значение в удаленной > записи. Очень хочется чтобы при удалении ззаписи с > максимальным значением счетчик скручивался на 1, можно ли > это осуществить какой-нить sql-ной или с-шной функцией???? > Он же где-то должен хранится!!! 
 Можно, как тебе предложили, самому бизнес логику реализовывать,
 то бишь поле не автоинкрементное делать, и id самому вычислять
 id = select max(*) или чото там.
 
 Можно еще использовать в запросе на обновление специфические для mysql опции по работе
 с уникальным полем - опять же см. мануал. Суть как раз в том,
 что ежели идет дубляж по уникальным ключам, можно изменить
 вводимое значение уникального ключа. Чото там "On duplicate"
 вроде зовется.
 | 
 
| 
<programming>
 |  
 
mysql  23.12.04 11:23  
 Автор: dron <Ivanov Andrey> Статус: Member
 | 
 
в сабже есть опция у числового столбца, зовется auto_increment, он гад постоянно увеличивается и даже если удалить из таблицы запись с максимальным значением такого столбаца и потом заинсертить новую, то следующее значение будет все равно на 1 больше,чем значение в удаленной записи. Очень хочется чтобы при удалении ззаписи с максимальным значением счетчик скручивался на 1, можно ли это осуществить какой-нить sql-ной или с-шной функцией???? Он же где-то должен хранится!!!
 p.s. функцию last_insert_id смотрел - это не то, мне не надо знать последнее сгенеренное значение. мне надо уметь ставить счетчик в нужное значение... Спасибо
 | 
 
 
  | 
С точки зрения целостности это недопустимо.  24.12.04 12:50  
 Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 24.12.04 12:50  Количество правок: 1
 | 
 
| 
 | 
 
 
  | 
Извратный, но простой вариант: Копируем в новую табличку, старую удаляем, переименовываем.  24.12.04 11:01  
 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
 | 
 
| 
 | 
 
 
  | 
Можно, как тебе предложили, самому бизнес логику...  24.12.04 10:49  
 Автор: paganoid Статус: Member
 | 
 
> в сабже есть опция у числового столбца, зовется > auto_increment, он гад постоянно увеличивается и даже если > удалить из таблицы запись с максимальным значением такого > столбаца и потом заинсертить новую, то следующее значение > будет все равно на 1 больше,чем значение в удаленной > записи. Очень хочется чтобы при удалении ззаписи с > максимальным значением счетчик скручивался на 1, можно ли > это осуществить какой-нить sql-ной или с-шной функцией???? > Он же где-то должен хранится!!! 
 Можно, как тебе предложили, самому бизнес логику реализовывать,
 то бишь поле не автоинкрементное делать, и id самому вычислять
 id = select max(*) или чото там.
 
 Можно еще использовать в запросе на обновление специфические для mysql опции по работе
 с уникальным полем - опять же см. мануал. Суть как раз в том,
 что ежели идет дубляж по уникальным ключам, можно изменить
 вводимое значение уникального ключа. Чото там "On duplicate"
 вроде зовется.
 | 
 
 
  | 
А это поле случаем не виртуальное (вычисляемое). Зачем...  23.12.04 12:43  
 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
 | 
 
> в сабже есть опция у числового столбца, зовется > auto_increment, он гад постоянно увеличивается и даже если > удалить из таблицы запись с максимальным значением такого > столбаца и потом заинсертить новую, то следующее значение > будет все равно на 1 больше,чем значение в удаленной > записи. Очень хочется чтобы при удалении ззаписи с > максимальным значением счетчик скручивался на 1, можно ли > это осуществить какой-нить sql-ной или с-шной функцией???? > Он же где-то должен хранится!!! > p.s. функцию last_insert_id смотрел - это не то, мне не > надо знать последнее сгенеренное значение. мне надо уметь > ставить счетчик в нужное значение... Спасибо 
 А это поле случаем не виртуальное (вычисляемое). Зачем хранить в каждой записи значение, когда его можно легко вычислить по номеру записи. В этом случае разумеется никак. В противном (Вашем) случае произойдет нарушение логической структуры. А именно возможно наличие двух записей с одинаковым полем или пропущеное значение. По определению этого поля такого быть не должно.
 | 
 
 
  |   | 
что подразумевается под номером записи??  23.12.04 14:40  
 Автор: dron <Ivanov Andrey> Статус: Member
 | 
 
>это поле случаем не виртуальное (вычисляемое). Зачем
 > хранить в каждой записи значение, когда его можно легко > вычислить по номеру записи. В этом случае разумеется никак. > В противном (Вашем) случае произойдет нарушение логической > структуры. А именно возможно наличие двух записей с > одинаковым полем или пропущеное значение. По определению > этого поля такого быть не должно. пример:
 create table table (id int primary key auto_increment, car varchar(80));
 заполняем ее значениями:
 insert into table (car) values ('bmw') 
 insert into table (car) values ('mersedes') 
 insert into table (car) values ('audi') 
 делаем select * from table, получаем:
 
                id          car
                 1          bmw
                 2          mersedes
                 3          audi
 
 удаляем 3-ю запись (delete from table where id=3)
 вставляем новую запись (insert into table (car) values ('oka') )
 делаем select * from table, получаем:
 
                id          car
                 1          bmw
                 2          mersedes
                 4          oka
 
 т.есть новая запись пронумеровалась 4-й, а я хочу после удаления записи вручную отнимать от счетчика 1, чтоб новая запись нумеровалась опять-таки цифрой 3
 | 
 
 
  |   |   | 
Сам мути бизнес-логику триггерами или ещё как... Это стандартное поведение поля autoincrement, даже в Paradox ;-)  23.12.04 18:20  
 Автор: HandleX <Александр М.> Статус: The Elderman
 | 
 
| 
 | 
 
 
  |   |   | 
Редко встретишь базу которая по честному удаляет записи...  23.12.04 15:35  
 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 23.12.04 15:36  Количество правок: 1
 | 
 
> пример: > create table table (id int primary key auto_increment, car > varchar(80)); > заполняем ее значениями: > insert into table (car) values ('bmw')  > insert into table (car) values ('mersedes')  > insert into table (car) values ('audi')  > удаляем 3-ю запись (delete from table where id=3) > вставляем новую запись (insert into table (car) values > ('oka') ) > делаем select * from table, получаем: >  > 	       id	   car > 		1	   bmw > 		2	   mersedes > 		4	   oka >  > т.есть новая запись пронумеровалась 4-й, а я хочу после > удаления записи вручную отнимать от счетчика 1, чтоб новая > запись нумеровалась опять-таки цифрой 3 
 Редко встретишь базу которая по честному удаляет записи. Если в старых DB-ориентированных/совместимых с этим было прозрачно - был атрибутик удаленности записи, то в современных все сильно маскируется. Хотя при желании запись все-таки можно восстановить. Короче запись там все-таки есть. В селектах ее соответственно не видно, но вычисляемое поле для нее просчитывается. В результате не увидеть ни записи, ни автоинкрементного поля. Отсутствие возможности его изменить, лишь только подтвердит нарушение целостности или вычисляемость этого поля.
 | 
 
 
  |   |   | 
autoincrement - такой тип переменный который всегда увеличивается. Не помню в mysql, но в MS можно создать тригеры на добавление/удаление записи и там вычисляь значение поля. Очень интересно увидеть "определение" для такой задачи.  23.12.04 15:24  
 Автор: Garick <Yuriy> Статус: Elderman
 | 
 
| 
 | 
 
 
  
 
 | 
 |