Ошибка PK при Insert

Freeman

Новичок
Ошибка PK при Insert

Есть таблица с этапами работы:
CREATE TABLE stages (
id int(11) NOT NULL default '0',
project_id int(11) NOT NULL default '0',
name char(150) NOT NULL default '',
date_first char(10) NOT NULL default '',
date_last char(10) NOT NULL default '',
note char(150) NOT NULL default '',
PRIMARY KEY (id,project_id),
KEY id (name)
) TYPE=MyISAM;

При "простом" Insert'e (когда инкрементируется id и данные добавляются в "конец" таблицы) все отлично. Но, к сожалению возникает необходимость добавлять данные в середину (например между 3 и 4 этапом). Соответственно, делаю UPDATE stages SET id=id+1 WHERE id>$cur_id
Чаще всего эта конструкция срабатывает, но иногда выдает ошибку на Primary KEY (логично, текущая запись инкрементирована, следующая еще нет). Как организовать такую вставку???
P.S. На дату ориентироваться нельзя, т.к. например, этап 7 может начинаться раньше или вместе, например, с 4 этапом. А выводить 4 этап все равно надо выше 7.
 

Гюльчатай

Guest
а смысл добавлять строки в определенном порядке?важно же не как добавляешь строки, а как выводишь их. кроме как по id этапы никак нельзя обозначить?
а первичный ключ так ты не сможешь изменить, потому что такое значение уже существует в таблице.
 

lucas

Guest
Freeman

Первичный ключ изменять не надо.
Он не для этого предназначен.
http://tony2001.phpclub.net/faq/mysql.auto_increment.html

Если требуется сортировка в требуемом порядке, следует создать дополнительное поле sort и сортировать уже по нему как ты пытался выше.
 

Freeman

Новичок
Автор оригинала: lucas
Если требуется сортировка в требуемом порядке, следует создать дополнительное поле sort и сортировать уже по нему как ты пытался выше.
Да, до этого я дошел. Но, по идее, это доп. поле sort тоже должно входить в Primary key во избежание накладок. Опять же те же грабли...
 

lucas

Guest
по идее, это доп. поле sort тоже должно входить в Primary key во избежание накладок
Тупая у тебя идея.
Если хочется обеспечить уникальность этого поля, сделай UNIQUE-индекс по sort.
 
Сверху