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.
Есть таблица с этапами работы:
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.