powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Foreign keys в InnoDB
8 сообщений из 8, страница 1 из 1
Foreign keys в InnoDB
    #32095365
KI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполняю
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
Foreign keys в InnoDB
    #32095407
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом документе :
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
Foreign keys в InnoDB
    #32095413
KI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но я использую InnoDB
...
Рейтинг: 0 / 0
Foreign keys в InnoDB
    #32095419
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда проверь. Ты должен создавать их таким образом:

Код: 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
Foreign keys в InnoDB
    #32095435
KI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Foreign keys в InnoDB
    #32095665
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остается проверить версию MySQL и если дело не в этом то спроси тут .
...
Рейтинг: 0 / 0
Foreign keys в InnoDB
    #32095715
Anatoliy Kuzmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проверь настройки в my.cnf
У меня это точно работает
Кроме того - сделай дамп таблицы - возможно mysql автоматом переключает в myisam
Просто mysql по умолчанию идет без полной поддержки innodb - под unix надо дописывать пару опций при компиляции
...
Рейтинг: 0 / 0
Foreign keys в InnoDB
    #32095742
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
show create table my_table;

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


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