Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
ON DELETE и ON UPDATE (kpblca) 24/07/2003 - 15:42:17
      Re: ON DELETE и ON UPDATE (walrus) 24/07/2003 - 17:57:17
      Re: ON DELETE и ON UPDATE (kpblca) 29/07/2003 - 13:00:30
      Re: ON DELETE и ON UPDATE (jjjj) 27/01/2007 - 19:09:58
      Re: ON DELETE и ON UPDATE (I) 03/11/2008 - 20:28:00



From: kpblca - 24/07/2003 - 15:42:17
Subject:ON DELETE и ON UPDATE
-----------------
Не смотря на заверения документации, что сии ограничения на внешний ключ должны работать для таблиц InnoDB (ну не все ограничения, а некоторые) должны работать, у меня ни х.. не работает.

[Цитата из документации]
Начиная с версии 3.23.50 с ограничением внешнего ключа можно также связывать выражения ON DELETE CASCADE или ON DELETE SET NULL. Начиная с версии 4.0.8 вы можете это же использовать с ON UPDATE.

Если указано выражение ON DELETE CASCADE и строка в родительской таблице удалена, то в формате InnoDB все эти строки автоматически удаляются также и из дочерней таблицы, значения внешнего ключа которой равны значениям ссылочного ключа в строке родительской таблицы. Если указано выражение ON DELETE SET NULL, строки дочерней таблицы автоматически обновляются, поэтому столбцам во внешнем ключе также присваивается значение SQL NULL.
[Конец цитаты]

Там же есть и пример, который у меня не работает ни хрена.
Вот пример из док-ции:

CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE SET NULL
) TYPE=INNODB;

А вот что я делал:

Your MySQL connection id is 87 to server version: 3.23.56

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id),
-> FOREIGN KEY (parent_id) REFERENCES parent(id)
-> ON DELETE SET NULL
-> ) TYPE=INNODB;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into parent values (1), (2), (3);
Query OK, 3 rows affected (0.00 sec)
???????: 3 ??????: 0 ??????????????: 0

mysql> insert into child values (1,1), (2,2), (3,3);
Query OK, 3 rows affected (0.00 sec)
???????: 3 ??????: 0 ??????????????: 0

mysql> delete from parent where id=1;
Query OK, 1 row affected (0.00 sec)

mysql> select * from child ;
+------+-----------+
| id | parent_id |
+------+-----------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+------+-----------+
3 rows in set (0.00 sec)

mysql>

Просите за не ту кодировку, она при вставке так получилась.
Итак, я не вижу значения null для поля parent_id в строке, где id=3 в таблице child.

Тот же пример в Mysql 4.0.1 ругается на команде
delete from parent where id=1;
(что-то вроде: не могу удалить из-за поля parent_id, связанного внешним ключом) хотя ограничение стоит SET NULL !!!!

Очевидно, что сия оказия есть некий баг, так как поведение системы явно не соответсвует док-ции.
Отсюда у меня вытекает
Вопрос: у кого-нибудь в MySQL работают ограничения на внешние ключи, и если работает, то в какой версии.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
34426



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |