SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 02.01.2010 01:14:05

atm779
Участник
Зарегистрирован: 19.11.2008
Сообщений: 6

работа с дочерними таблицами

У меня есть 2 таблицы.

CREATE TABLE IF NOT EXISTS `parent` (
`id` int(5) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)

CREATE TABLE IF NOT EXISTS `child` (
`id` int(11) NOT NULL,
`text` text,
FOREIGN KEY (id) REFERENCES page(id) ON DELETE CASCADE ON UPDATE CASCADE
)

Когда удаляю запись из таблицы parent, запись из child удаляется автоматически. Можно ли сделать таким образом, чтобы при добавлении записи в parent, запись в child создавалась автоматически. Как это можно сделать ?

Неактивен

 

#2 02.01.2010 10:59:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: работа с дочерними таблицами

Добавляя запись в parent с помощью хранимой процедуры, которая будет добавлять нужную запись в child.

Неактивен

 

#3 02.01.2010 14:00:07

atm779
Участник
Зарегистрирован: 19.11.2008
Сообщений: 6

Re: работа с дочерними таблицами

т.е. вы говорите что единственный способ это реализовать через триггер ?

Неактивен

 

#4 03.01.2010 00:19:16

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: работа с дочерними таблицами

Можно и через триггер, но лучше с помощью хранимой процедуры. В этом случае можно реализовать через транзакцию, чтобы не возникло ситуации - в parent добавление произошло, а в child нет.

Неактивен

 

#5 03.01.2010 02:40:36

atm779
Участник
Зарегистрирован: 19.11.2008
Сообщений: 6

Re: работа с дочерними таблицами

Я решил, все таки испольовать триггер, чтобы более автоматизировать процесс. Но никак не могу разобраться почему мой триггер не срабатывает

BEGIN
  INSERT INTO page_data
  SET
    page_data.id = (SELECT MAX(id) FROM page) AND
    page_data.name = (SELECT NAME FROM name WHERE id = (SELECT MAX(id) FROM page));

END

В то время как такой работает

BEGIN
  INSERT INTO page_data
  SET
    page_data.id = (SELECT MAX(id) FROM page);

END

В чем моя ошибка

Неактивен

 

#6 03.01.2010 10:00:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: работа с дочерними таблицами

SELECT NAME FROM name  -- подозреваю, что таблица всё-таки не name.

А может всё гораздо проще:

delimiter $$
create trigger parent_ai after insert on parent
for each row
begin
insert into child values(new.id,new.name);
end$$


Рекомендую посмотреть http://dev.mysql.com/doc/refman/5.0/en/ … igger.html

Неактивен

 

#7 05.01.2010 00:28:24

atm779
Участник
Зарегистрирован: 19.11.2008
Сообщений: 6

Re: работа с дочерними таблицами

спасибо

Неактивен

 

Board footer

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