Forum Webscript.Ru
Общие => Базы данных => Тема начата: Light_Sv от 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? Если кто сталкивался с такой проблемой - подскажите , что делать ?
Светлана.
-
Light_Sv
внешний ключ у тебя разрешает удаление? на примерах смотрел?
-
AFAIK, restrict - это поведение по умолчанию, поэтому его необязательно писать
-
Light_Sv
AFAIK - внешние ключи в MySQL 4.0 еще не работают, правда их можно описать
-
Phoinix:
AFAIK - внешние ключи в MySQL 4.0 еще не работают,
в 4.0.22 точно работают (в текущем проекте использую)
-
Макс
в 4.0.22 точно работают (в текущем проекте использую)
Не знал, спасибо...
Хм... а у меня 4.0.18, устарел малеха... надо бы обновить...
-
Phoinix:
а у меня 4.0.18, устарел малеха
в этой версии они тоже работают ..
хотя обновить конечно не мешает.
-
Макс
Большое спасибо, все так и есть - show create table не показывает on delete restrict , но при этом restrict используется по умолчанию.
Светлана.
-
На этом мои приключения не кончились :)
У меня есть табличка , в которой имеется связь сама к себе.
поле id -> поле parentid
Пытаюсь создать внешний ключ на parentid , чтобы каскадно обновлять и удалять записи .
Запускаю show create table - все отлично, выдает все что надо
ON DELETE CASCADE ON DELETE RESTRICT , а при попытке удалить или обновить записи, у которых есть дочерние записи говорит, что не может, foreign key failed.
Т.е. получается что таблица использует ON DELETE RESTRICT .
Версия mySQL 4.0.22. Если кто-нибудь занимался с такими связями таблиц - помогите, pls.
-
ой извиняюсь - не правильно написала ,
show create table выдает on delete cascade, конечно
Светлана.
-
а что говорит об этой ошибке
SHOW INNODB STATUS
?
-
Макс
Show innodb status - говорит, что прав у меня нет . Access denied.
Светлана.
-
я в этой ситуации устанавливал скрипт у себя на компе и тестировал эти foreign keys у себя