Перемещение и удаление строк в MySQL

0

Я создал две таблицы в MySQL, которые называются "BirthTable" и "deathTable". Когда я добавляю человека в deathTable, который он/она был в родословной, я хочу удалить его имя и фамилию из-под рождения, потому что я добавляю его/ее в deathTable. Но я не знаю, как я могу это сделать?

  • 2
    Я надеюсь, что люди, которых вы добавляете в deathTable, уже мертвы :)
  • 1
    почему вы не используете одну таблицу "People" и не добавляете логический столбец "is_dead"?
Теги:

5 ответов

2
Лучший ответ

Что вам нужно сделать, так это построить DELETE FROM -query. Если вы хотите удалить только одну строку из таблицы, вы должны быть уверены, что параметры, которые вы ей указываете, уникальны для этой строки. Обычно это делается с помощью столбца с именем id. Затем, зная id, все, что вам нужно сделать, это следующее:

DELETE FROM table WHERE id=<your id>;

Я думаю, что в вашем случае у вас может быть таблица под названием "люди" и булевский столбец "живой", который равен 1, если человек жив, и 0, если человек мертв.

Если вы все же хотите удалить одну строку из вашей родительской таблицы, если вы знаете имя этого человека, вы делаете это следующим образом:

DELETE FROM birthTable WHERE firstName=<first name> AND lastName<last name>;

Я предположил, что имена столбцов для имени и фамилии firstName и lastName, вам придется изменить это, чтобы они соответствовали вашим именам столбцов. Это приведет к удалению любой записи в BirthTable, которая соответствует критерию (может быть более одного, если у вас есть, например, 2 человека по имени Алан Джонсон).

Надеюсь, что это поможет.:)

15

То, что вы описываете, может быть сделано вручную или с помощью триггеров, но обычно вы не должны этого делать.

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

В общем, вы не должны перемещать записи просто потому, что некоторые атрибуты о них изменились.

  • 2
    Технически все, что вы сказали, правильно (и я с вами согласен), но все, что вы здесь сказали, не отвечает на вопрос и не помогает решить непосредственную проблему ОП.
  • 1
    Это была попытка направить ОП к лучшему решению.
Показать ещё 4 комментария
4

Это SQL:

DELETE FROM birthTable WHERE id = ...

где id - это имя некоторого идентифицирующего поля.

Вот документация для DELETE.

1

Вы можете записать триггер для вставки в таблицу deathTable, которая удаляет соответствующую строку из birthTable.

CREATE TRIGGER trg_deathTable_insert
    BEFORE INSERT ON deathTable
    FOR EACH ROWS
BEGIN
    DELETE FROM birthTable WHERE person_id = NEW.person_id;
END;
  • 0
    здесь нет необходимости в триггерах ... и удаление по идентификатору, вероятно, неправильно, если идентификатор является автоинкрементным
  • 0
    «удаление по идентификатору, вероятно, неправильно, если идентификатор является автоинкрементным». Не могли бы вы объяснить, почему это неправильно?
0
DELETE FROM birthTable WHERE id = xxx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню