![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
В общем есть у меня таблички 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
Неактивен

Проверил, код работает. 5.0.51b, ubuntu ![]()
Обновите сервер, нет смысла разрабатывать продукт на том, что не работает.
Неактивен
ОК, вы меня убедили![]()
Неактивен
Страниц: 1