Автор Тема: on delete restrict  (Прочитано 6893 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Light_Sv

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
on delete restrict
« : 21 Марта 2005, 12:42:41 »
Помогите , pls, разобраться с созданием foreign key
mySQL 4.0.22 .
читаю документацию и беру следующий пример :
CREATE TABLE product (category INT NOT NULL, id INT NOT NULL,
                      price DECIMAL,
                      PRIMARY KEY(category, id)) TYPE=INNODB;
CREATE TABLE customer (id INT NOT NULL,
                      PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,
                      product_category INT NOT NULL,
                      product_id INT NOT NULL,
                      customer_id INT NOT NULL,
                      PRIMARY KEY(no),
                      INDEX (product_category, product_id),
                      FOREIGN KEY (product_category, product_id)
                        REFERENCES product(category, id)
                        ON UPDATE CASCADE ON DELETE RESTRICT,
                      INDEX (customer_id),
                      FOREIGN KEY (customer_id)
                        REFERENCES customer(id)) TYPE=INNODB;

отрабатывает без ошибок, НО!

после этого запускаю show create table product_order и получаю
CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,
                      product_category INT NOT NULL,
                      product_id INT NOT NULL,
                      customer_id INT NOT NULL,
                      PRIMARY KEY(no),
                      INDEX (product_category, product_id),
                      FOREIGN KEY (product_category, product_id)
                        REFERENCES product(category, id)
                        ON UPDATE CASCADE ,
                      INDEX (customer_id),
                      FOREIGN KEY (customer_id)
                        REFERENCES customer(id)) TYPE=INNODB;

т.е. on delete restrict - исчез.
а мне-то он как раз очень нужен. Если пишу  ON DELETE CASCADE - все прекрасно отрабатывает. Возможно проблема в настройках mySQL? Если кто сталкивался с такой проблемой - подскажите , что делать ?

Светлана.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
on delete restrict
« Ответ #1 : 21 Марта 2005, 12:52:49 »
Light_Sv
внешний ключ у тебя разрешает удаление? на примерах смотрел?
And no religion too...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
on delete restrict
« Ответ #2 : 21 Марта 2005, 14:19:54 »
AFAIK, restrict - это поведение по умолчанию, поэтому его необязательно писать
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
on delete restrict
« Ответ #3 : 21 Марта 2005, 15:58:13 »
Light_Sv

AFAIK - внешние ключи в MySQL 4.0 еще не работают, правда их можно описать

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
on delete restrict
« Ответ #4 : 21 Марта 2005, 22:57:20 »
Цитировать
Phoinix:
 AFAIK - внешние ключи в MySQL 4.0 еще не работают,

в 4.0.22 точно работают (в текущем проекте использую)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
on delete restrict
« Ответ #5 : 22 Марта 2005, 00:36:02 »
Макс

Цитировать
в 4.0.22 точно работают (в текущем проекте использую)


Не знал, спасибо...

Хм... а у меня 4.0.18, устарел малеха... надо бы обновить...

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
on delete restrict
« Ответ #6 : 22 Марта 2005, 15:37:45 »
Цитировать
Phoinix:
а у меня 4.0.18, устарел малеха


в этой версии они тоже работают ..
хотя обновить конечно не мешает.
На Машине Тьюринга далеко не уедешь.

Оффлайн Light_Sv

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
on delete restrict
« Ответ #7 : 22 Марта 2005, 16:36:26 »
Макс
Большое спасибо, все так и есть - show create table не показывает on delete restrict  , но  при этом restrict  используется по умолчанию.

Светлана.

Оффлайн Light_Sv

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
on delete restrict
« Ответ #8 : 28 Марта 2005, 13:58:45 »
На этом мои приключения не кончились :)
У меня есть табличка , в которой имеется связь сама к себе.
поле id  -> поле parentid
Пытаюсь создать внешний ключ на parentid , чтобы каскадно обновлять и удалять записи .
Запускаю show create table - все отлично, выдает все что надо
ON DELETE CASCADE ON DELETE RESTRICT , а при попытке удалить или обновить записи, у которых есть дочерние записи говорит, что не может, foreign key failed.
Т.е. получается что таблица использует ON DELETE RESTRICT .
Версия mySQL 4.0.22. Если кто-нибудь занимался с такими связями таблиц - помогите, pls.

Оффлайн Light_Sv

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
on delete restrict
« Ответ #9 : 28 Марта 2005, 14:00:27 »
ой извиняюсь - не правильно написала ,
show create table выдает on delete cascade, конечно

Светлана.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
on delete restrict
« Ответ #10 : 28 Марта 2005, 22:24:29 »
а что говорит об этой ошибке
SHOW INNODB STATUS
?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Light_Sv

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
on delete restrict
« Ответ #11 : 08 Апреля 2005, 17:06:51 »
Макс

Show innodb status - говорит, что прав у меня нет . Access denied.

Светлана.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
on delete restrict
« Ответ #12 : 09 Апреля 2005, 19:18:48 »
я в этой ситуации устанавливал скрипт у себя на компе и тестировал эти foreign keys у себя
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28