SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.09.2008 23:27:16

Qtx
Участник
Зарегистрирован: 16.09.2008
Сообщений: 7

Не работает auto_increment в запросе вида insert ... select

В общем есть у меня таблички form и element и процедурка для копирования формы. Полный тестовый скрипт следует

Код:

drop table if exists form;
drop table if exists element;

create table form
(
id int not null auto_increment,
name varchar(200),
prop1 varchar(200),
prop2 varchar(200),
primary key(id)
);

create table element
(
id int not null auto_increment,
name varchar(200),
prop1 varchar(200),
prop2 varchar(200),
form_id int,
primary key(id),
CONSTRAINT `element_form_fk` FOREIGN KEY (form_id) REFERENCES form (ID) ON DELETE CASCADE
);

/*
inserting test values
*/

insert into form (name, prop1, prop2) value ('contact', '1', '2');
insert into element (name, prop1, prop2, form_id) values ('last_name', '1', '2', 1);
insert into element (name, prop1, prop2, form_id) values ('first_name', '1', '2', 2);
insert into element (name, prop1, prop2, form_id) values ('email', '1', '2', 3);

drop procedure if exists copy_form;

create procedure copy_form(src_form_id integer, new_form_name varchar(200))
    DETERMINISTIC
    SQL SECURITY INVOKER
begin

  declare new_from_id integer;

  insert into form (name, prop1, prop2)
  SELECT new_form_name, prop1, prop2 from form where id = src_form_id;

  set @new_from_id = last_insert_id();

  insert into element (name, prop1, prop2, form_id)
  SELECT name, prop1, prop2, @new_from_id from element
  where form_id = src_form_id;

end;

call copy_form(1, 'copy_of_contact');

И результат

Duplicate entry '3' for key 1

До копирования в таблице element счетчик стоит на 3, см. занесение тестовый данных. При копировании что делаем:

Копируем запись формы все копируем, имя используем новое переданное через параметр. Получаем ID только что вставленной формы.
Копируем элементы старой формы вместо FORM_ID подставляем ID только что добавленный.

Данный скрипт ДОЛЖЕН работать, аналогичный работает на MS SQL, но почему то у меня выдает ошибку. Видимо не происходит автоинкремента в последнем insert запросе.

PS
MySQL 5.0.22 Windows

Неактивен

 

#2 17.09.2008 00:15:42

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Не работает auto_increment в запросе вида insert ... select

Проверил, код работает. 5.0.51b, ubuntu smile
Обновите сервер, нет смысла разрабатывать продукт на том, что не работает.

Неактивен

 

#3 17.09.2008 09:01:03

Qtx
Участник
Зарегистрирован: 16.09.2008
Сообщений: 7

Re: Не работает auto_increment в запросе вида insert ... select

ОК, вы меня убедилиsmile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson