|
|
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
Привет всем! Использую innodb, там есть возможность задавать foreign keys. Есть, наример, таблица companies и есть таблицы которые с ней связаны, например, accounts, orders и т.п. Если я удаляю запись в таблице companies то удаляются соответсвующие записи и во всех связанных таблицах. А можно ли сделать обратную вещь - пока существуют записи в связанных таблицах, то из таблицы companies ничего удалить нельзя? Рылся в хелпах mysql и inet-е но ничего толком не нашел... может я чего-то упустил? Подскажите пожалста если кто знает : ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 18:49 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
Задай ключи наоборот. И констрейнты повесь. правда, не знаю, с какой версии мускул это поддерживает. Перейди на PostgreSQL. Там все проще и богаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 19:07 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
Я б на Postgres перешел : ) Осталось уболтать заказчиков... Mysql с констрейтами только в innodb таблицах работает, с 4.х и в 5 альфе точно, более старые не проверял. Наоборот пробовал задать но че-то не проходит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 19:17 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
ON DELETE CASCADE - удалить в подчиненных ON DELETE RESTRICT - запретить удаление, если есть подчиненные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 22:39 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
on delete restrict тоже пробовал но почему-то не хочет ставиться, еще пробовал сначала SET FOREIGN_KEY_CHECKS = 0; затем on delete restrict, все равно облом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 12:12 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
А что говорит-то? Он должен что-то в консоль выдавать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 13:31 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
Выдавалось 1216 - Cannot add or update a child row: a foreign key constraint fails Я пока все проверки перед удалением на php реализовал, но это не сильно удобно, особенное если прийдется кучу новых таблиц добавлять, буду еще эксперементировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 15:15 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
Такая ошибка вылазит, кады в подчиненной таблице есть ключевые записи, которых нет в парентной таблице - вот ему и не создать индекс. Выловить эти записи просто: SELECT child_table.child_key FROM child_table LEFT JOIN parent_table ON (child_table.child_key = parent_table.parent_key) WHERE child_table.child_key IS NOT NULL AND parent_table.parent_key IS NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 10:53 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
Записи были с нормально прописанными id (я на паре тестовых таблиц пробовал), самое забавное что on delete cascade ставилось, а on delete restrict нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 14:40 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
Покажите пожалуйста на примере когда on delete cascade работает а restrict - нет. Что то вы (не обижайтесь) гоните. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 15:37 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
А CONSTRAINT указывали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 15:53 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
Видимо действительно гоню : ) сейчас RESTRICT отрабатывается. Всем спасибо за помошь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 16:50 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
А если имеются две таблички с одним родителем, но в одной - стоит рестрикт, а в другой - каскад - и при удалении записи из родителя если сработает рестрикт - то каскад на другой таблице отменится или нет? Вроде - должен - по идее - это транзакция - или - в Мускуле это не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 17:04 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
Хороший вопрос, не знаю если честно : ) Я недавно начал со всем этим разбираться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2004, 14:06 |
|
||
|
Foreign keys
|
|||
|---|---|---|---|
|
#18+
Я попробовал случай с двумя табличками Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. В этом случае запись из parent удалить не получается, MySQL выдает #1217 - Cannot delete or update a parent row: a foreign key constraint fails сascade соответственно тоже не отработал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2004, 14:52 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=32697652&tid=1854798]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 538ms |

| 0 / 0 |
