Удалите из двух таблиц в одном запросе

У меня есть две таблицы в MySQL

#messages table  : 
messageid
messagetitle 
.
.

#usersmessages table 
usersmessageid 
messageid
userid
.
.

Теперь, если я хочу удалить из таблицы сообщений, она в порядке. Но когда я удаляю сообщение messageid, запись все еще существует на usersmessage, и я должен удалить из этого две таблицы сразу.

Я использовал следующий запрос:

DELETE FROM messages LEFT JOIN usersmessages USING(messageid) WHERE messageid='1' ; 

Затем я тестирую

   DELETE FROM messages , usersmessages 
   WHERE messages.messageid = usersmessages.messageid 
   and messageid='1' ; 

Но эти два запроса не выполняют эту задачу.

71
задан Luis Reinstate Monica 31 October 2019 в 10:51
поделиться

3 ответа

Разве вы не можете просто разделить их точкой с запятой?

Delete from messages where messageid = '1';
Delete from usersmessages where messageid = '1'

ИЛИ

Просто используйте INNER JOIN , как показано ниже

DELETE messages , usersmessages  FROM messages  INNER JOIN usersmessages  
WHERE messages.messageid= usersmessages.messageid and messages.messageid = '1'
121
ответ дан 24 November 2019 в 12:52
поделиться

Вы должны либо создать FOREIGN KEY с помощью ON DELETE CASCADE :

ALTER TABLE usersmessages
ADD CONSTRAINT fk_usermessages_messageid
FOREIGN KEY (messageid)
REFERENCES messages (messageid)
ON DELETE CASCADE

, либо сделать это с помощью двух запросов в транзакции:

START TRANSACTION;;

DELETE
FROM    usermessages
WHERE   messageid = 1

DELETE
FROM    messages
WHERE   messageid = 1;

COMMIT;

Однако транзакция влияет только на таблицы InnoDB .

13
ответ дан 24 November 2019 в 12:52
поделиться

У вас есть два варианта:

Во-первых, выполните два оператора внутри транзакции:

BEGIN;
  DELETE FROM messages WHERE messageid = 1;
  DELETE FROM usermessages WHERE messageid = 1;
COMMIT;

Или вы можете настроить ON DELETE CASCADE с внешним ключом. Это лучший подход.

CREATE TABLE parent (
  id INT NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE child (
  id INT, parent_id INT,
  FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
);

Подробнее о ON DELETE CASCADE можно прочитать здесь .

7
ответ дан 24 November 2019 в 12:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: