Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Foreign keys в InnoDB / 8 сообщений из 8, страница 1 из 1
23.01.2003, 16:48
    #32095365
KI
KI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign keys в InnoDB
Выполняю
alter table tb_body add foreign key body_art(id) references tb_art(body_id) on delete cascade;
Query OK, 5 rows affected (0.09 sec)
Records: 5 Duplicates: 0 Warnings: 0

После чего экспериментирую с удалением связанных данных как из одной таблицы так и из другой, удаляется только из удаляемой таблицы, без удаления во второй. В чем прикол?
...
Рейтинг: 0 / 0
23.01.2003, 17:36
    #32095407
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign keys в InnoDB
В этом документе :
Note that foreign keys in SQL are not used to join tables, but are used mostly for checking referential integrity (foreign key constraints). If you want to get results from multiple tables from a SELECT statement, you do this by joining tables.

В основном используются только для проверки. Селекты автоматом не будут подцеплять таблицы.

Там же:
In MySQL Server 4.0 you can use multi-table delete to delete rows from many tables with one command. See section 6.4.6 DELETE Syntax .

Тут сказано:
You don't actually need foreign keys to join 2 tables. The only thing MySQL currently doesn't do (in table types other than InnoDB), is CHECK to make sure that the keys you use really exist in the table(s) you're referencing and it doesn't automatically delete rows from a table with a foreign key definition . If you use your keys like normal, it'll work just fine.
...
Рейтинг: 0 / 0
23.01.2003, 17:40
    #32095413
KI
KI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign keys в InnoDB
Но я использую InnoDB
...
Рейтинг: 0 / 0
23.01.2003, 17:51
    #32095419
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign keys в InnoDB
Тогда проверь. Ты должен создавать их таким образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
The syntax of a foreign key constraint definition in InnoDB: 

[CONSTRAINT symbol] FOREIGN KEY (index_col_name, ...)
                  REFERENCES table_name (index_col_name, ...)
                  [ON DELETE {CASCADE | SET NULL | NO ACTION
                              | RESTRICT}]
                  [ON UPDATE {CASCADE | SET NULL | NO ACTION
                              | RESTRICT}]
...
Рейтинг: 0 / 0
23.01.2003, 17:58
    #32095435
KI
KI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign keys в InnoDB
CREATE TABLE `tb_body` (
`id` int(11) NOT NULL auto_increment,
`body` text,
PRIMARY KEY (`id`),
KEY `b_id` (`id`)
) TYPE=InnoDB

CREATE TABLE `tb_art` (
`id` int(11) NOT NULL auto_increment,
`body_id` int(11) default NULL,
`date` datetime default NULL,
`roubr_id` int(11) default NULL,
`sours_id` int(11) default NULL,
`title` varchar(255) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `body_id` (`body_id`),
UNIQUE KEY `d_r_s` (`date`,`roubr_id`,`title`)
) TYPE=InnoDB

Добавление и так

alter table tb_body add foreign key body_art(id) references tb_art(body_id) on delete cascade;
Query OK, 7 rows affected (0.07 sec)
Records: 7 Duplicates: 0 Warnings: 0

И вот так
alter table tb_body add foreign key body_art(b_id) references tb_art(body_id) on delete cascade;
Query OK, 7 rows affected (0.05 sec)
Records: 7 Duplicates: 0 Warnings: 0

А при удалении из любой таблицы никакого контроля не соблюдается.
Пробовал пример из доки тоже самое, может прикол в чемто другом??
...
Рейтинг: 0 / 0
24.01.2003, 09:26
    #32095665
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign keys в InnoDB
Остается проверить версию MySQL и если дело не в этом то спроси тут .
...
Рейтинг: 0 / 0
24.01.2003, 10:42
    #32095715
Anatoliy Kuzmin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign keys в InnoDB
Проверь настройки в my.cnf
У меня это точно работает
Кроме того - сделай дамп таблицы - возможно mysql автоматом переключает в myisam
Просто mysql по умолчанию идет без полной поддержки innodb - под unix надо дописывать пару опций при компиляции
...
Рейтинг: 0 / 0
24.01.2003, 11:09
    #32095742
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign keys в InnoDB
Код: plaintext
show create table my_table;

Показывает структуру таблицы my_table
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Foreign keys в InnoDB / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]