Я создал две таблицы, такие как marks
и users
. Я поддерживал отношение внешних ключей между двумя таблицами. Когда я удаляю строку в таблице marks
, мне нужно удалить этого конкретного пользователя в таблице пользователя на основе uid
, который существует в обеих таблицах, как правило, кто-нибудь может мне предложить?Лучший способ удалить записи в двух таблицах с внешним ключом?
ответ
Используйте опцию ON DELETE CASCADE, если вы хотите, чтобы строки были удалены в дочерней таблице, когда соответствующие столбцы удалены в родительской таблице.
Но ваш случай обратный от него. Нет возможности сделать обратный автоматически.
Нужно использовать триггер delete, когда запись удаляется из таблицы детей.
ОТМЕТЬТЕ его небезопасно, чтобы сделать обратное, поскольку может быть много записей меток для одного пользователя, и если вы удалите любой из них, тогда пользователь будет удален из таблицы пользователя.
Я предлагаю сделать это логически в sproc.
вы можете проверить в sproc, что вся запись для пользователя удалена в таблице меток, чем удаление пользователя из таблицы пользователя.
Ну для Вашего случая, я рекомендую использовать on delete cascade
Подробнее об этом:
Внешний ключ с каскадом удаления означает, что если запись в родительской таблице удаляется, то соответствующие записи в дочерней таблице автоматически удаляется. Это называется каскадным удалением в SQL Server.
Синтаксис для создания внешнего ключа с каскадное удаление с помощью инструкции TABLE в SQL Server (Transact-SQL) CREATE является:
CREATE TABLE child_table
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
CONSTRAINT fk_name
FOREIGN KEY (child_col1, child_col2, ... child_col_n)
REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
ON DELETE CASCADE
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);
Для далее this
нет, вы не можете сделать что –
, если я хочу удалить записи из asp.net, как я могу реализовать это в sql-команде? –
, вы можете с уверенностью сказать, но вы должны быть осторожны, например, вы удаляете дочернюю запись с помощью uid 1, а затем удаляете из записи родительской таблицы с помощью uid 1, может быть еще больше дочерних записей с uid как 1, и в этом случае он не позволит удалить –
В конструкции просто использовать при удалении каскада
CREATE TABLE child_table
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
CONSTRAINT fk_name
FOREIGN KEY (child_col1, child_col2, ... child_col_n)
REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
ON DELETE CASCADE
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);
Теперь, когда вы удаляете родителя. ребенок будет автоматически удален ... вам не нужно делать ничего
проверки Ссылки на деталь On delete cascade
Как я не люблю DELETE
любую строку из связанных таблиц, я предлагаю вам это решение:
- Добавить
status
поле со значением по умолчанию1
к вашему столу (ов). - Создайте
VIEW
, который отображает только строки сstatus <> 0
и используйте этоVIEW
, чтобы показать достоверность данных.Для родителей и детей или связанных таблиц просто показать строки с
status <> 0
для обоих родителей и ребенка, как таблицыparent.status * child.status <> 0
. - [Дополнительный & дополнительные] * Создать
log
таблицу илиjournal
для вашей базы данных или таблиц или просто важные таблиц и хранить какое-то действие, какCreate
,Edit\Modify
,Delete
,Undelete
и так далее.
- Поддержка
Undo
иRedo
. - Опора
Undelete
действие! - Не беспокойтесь о ребенке, у которого нет родителя.
- * Найдено старых данных, данных и многое другое.
И многие другие преимущества, и вы просто храните больше данных, что это не касается хорошей РСУБД.
Я использую DELETE
только для таблицы, которая находится на конце детской точки, и ее данные не так важны.
- 1. Обмен внешним ключом в двух таблицах в базе данных Oracle
- 2. Как обновить 2 столбца в 2 таблицах с внешним ключом
- 3. Как удалить реляционные записи в таблицах mutliple
- 4. Повторные вставки с основным ключом, внешним ключом
- 5. Добавление записи с новым внешним ключом
- 6. Удалить из таблицы с внешним ключом
- 7. Удалить записи из таблицы с внешним ключом (Derby)
- 8. Добавление записи базы данных с внешним ключом
- 9. Сохранение двух моделей с внешним ключом
- 10. Лучший способ связать записи в разных таблицах с SQLite
- 11. Использования нулевых значений в связанных таблицах с внешним ключом
- 12. Выберите столбец (с внешним ключом) без соединения двух таблиц
- 13. Удалить таблицы с внешним ключом в правильном порядке
- 14. Проблемы с внешним ключом отношением
- 15. SQL удалить столбец с внешним ключом
- 16. Удалить значения с тем же внешним ключом
- 17. Вставка записи в таблицу с внешним ключом - Ruby on Rails
- 18. Первичный ключ обновления SQL Server, который также является внешним ключом в двух таблицах
- 19. Django ModelForm с внешним ключом
- 20. Работа с внешним ключом
- 21. Проблемы с внешним ключом
- 22. Проблема с внешним ключом
- 23. Взаимодействие с внешним ключом
- 24. Ошибка с внешним ключом
- 25. Проблема с внешним ключом?
- 26. проблема с внешним ключом
- 27. Лучший способ получить конкретное значение в двух таблицах
- 28. Multiple удалить в двух таблицах
- 29. таблица обновлений с внешним ключом
- 30. Есть ли способ избежать исключения удаления записи, которая является внешним ключом в другой таблице
Я пробовал как в одной таблице пользователей с столбцами как sid, name, pwd, uid (PK), аналогично в меток таблицы name все метки объекта и uid (FK). если я попытался удалить по строке в меток на основе этого uid, я могу удалить записи в таблице users? –
[Как использовать каскадное удаление с SQL Server?] (Http://stackoverflow.com/questions/6260688/how-do-i-use-cascade-delete-with-sql-server) – har07
Возможный дубликат [Использование триггеры для реализации действий ссылочной целостности (SQL Server)] (http://stackoverflow.com/questions/30086504/using-triggers-to-implement-referential-integrity-actions-sql-server) –