Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
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
|
|
|
|