2010-09-14 2 views
8

Есть ли способ проверить, может ли строка быть потенциально удалена? То, что он, например, в настоящее время не подключен через ограниченные внешние ключи ни к чему еще.Проверьте, может ли строка быть удалена в MySQL

Причина: Я создаю страницу администратора со всеми пользователями в указанной системе. Они всегда могут быть отключены, но они также могут быть удалены. Однако их можно удалить только в том случае, если они не связаны с чем-либо критическим. И я бы не хотел проверять это вручную, если это легко сделать в базе данных.

Примечание: Я не хочу фактически удалять пользователя. Я просто хочу показать администратору, что пользователь может удалить.

+0

Попробуйте удалить его. Если db жалуется, это было невозможно. ;) – BoltBait

+0

Вы всегда можете удалить администратора, удалив связанный материал сначала, а затем удалив администратора. – Bot

+1

Хм, да, но тогда он уже будет удален, что может или не может быть тем, что нужно администратору: p Я просто хочу показать, является ли это возможностью. – Svish

ответ

3

Вы можете попробовать удалить его как часть транзакции, а затем отменить транзакцию, если она будет успешной. НО, я предполагаю, что следующий вопрос о том, почему вы не знаете, в первую очередь, если вы можете удалить строку или нет?

+1

Потому что у него могут быть различные ограничения, связанные с ним через внешние ключи, и я бы не стал вручную проверять все это, потому что они могли бы измениться, если я добавлю или удалю таблицу позже. – Svish

+0

У вас есть неудача в бизнес-логике. Этот тип проверки должен быть выполнен на вашем бизнес-уровне, который будет выполнять необходимые запросы, чтобы гарантировать, что пользователь не подключен ни к чему. – GrandmasterB

+2

Целостность данных данных и проверки, как это было для ограничений внешнего ключа? – Svish

1

Вы можете использовать представление, чтобы суммировать количество зависимостей, не беспокоясь о сохранении данных. & сохраняя его актуальным. Когда количество зависимостей равно нулю, сделайте опцию удаления доступной в пользовательском интерфейсе ...

0

Вы можете получить все осиротевшие строки, присоединив их слева к таблице, к которой они подключены, например, это даст вам все идентификаторы пользователя, у которых нет заданий.

SELECT u.id FROM users u LEFT JOIN jobs j on u.id=j.user_id WHERE j.user_id is null;