|
Foreign keys в InnoDB
|
|||
---|---|---|---|
#18+
Выполняю 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 После чего экспериментирую с удалением связанных данных как из одной таблицы так и из другой, удаляется только из удаляемой таблицы, без удаления во второй. В чем прикол? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2003, 16:48 |
|
Foreign keys в InnoDB
|
|||
---|---|---|---|
#18+
В этом документе : 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2003, 17:36 |
|
Foreign keys в InnoDB
|
|||
---|---|---|---|
#18+
Но я использую InnoDB ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2003, 17:40 |
|
Foreign keys в InnoDB
|
|||
---|---|---|---|
#18+
Тогда проверь. Ты должен создавать их таким образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2003, 17:51 |
|
Foreign keys в InnoDB
|
|||
---|---|---|---|
#18+
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 А при удалении из любой таблицы никакого контроля не соблюдается. Пробовал пример из доки тоже самое, может прикол в чемто другом?? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2003, 17:58 |
|
Foreign keys в InnoDB
|
|||
---|---|---|---|
#18+
Остается проверить версию MySQL и если дело не в этом то спроси тут . ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2003, 09:26 |
|
Foreign keys в InnoDB
|
|||
---|---|---|---|
#18+
Проверь настройки в my.cnf У меня это точно работает Кроме того - сделай дамп таблицы - возможно mysql автоматом переключает в myisam Просто mysql по умолчанию идет без полной поддержки innodb - под unix надо дописывать пару опций при компиляции ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2003, 10:42 |
|
|
start [/forum/topic.php?fid=47&fpage=711&tid=1856183]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 260ms |
total: | 377ms |
0 / 0 |