У меня есть две таблицы в mysql
#messages table :
messageid
messagetitle
.
.
#usersmessages table
usersmessageid
messageid
userid
.
.
теперь я хочу удалить из таблицы сообщений это нормально. но когда я удаляю сообщение с messageid = '1', например, он все еще существует в usermessage, я должен удалить из этих двух таблиц сразу;
поэтому я использую следующий запрос:
DELTE FROM messages LEFT JOIN usersmessages USING(messageid) WHERE messageid='1' ;
тогда я тестирую
DELETE FROM messages , usersmessages
WHERE messages.messageid = usersmessages.messageid
and messageid='1' ;
но эти два запроса не справляются с этой задачей.
Разве вы не можете просто отделить их точкой с запятой?
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'
DELETE a.*, b.*
FROM messages a
LEFT JOIN usersmessages b
ON b.messageid = a.messageid
WHERE a.messageid = 1
translation: удалить из таблицы сообщения, где messageid = 1, если в таблице uersmessages имеется messageid = messageid из таблицы сообщений, удалите эту строку uersmessages.
Вы должны либо создать 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
.
У вас есть два варианта:
Сначала сделайте два оператора внутри транзакции:
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 здесь.
BEGIN; .... COMMIT;
DELETE message.*, usersmessage.* from users, usersmessage WHERE message.messageid=usersmessage.messageid AND message.messageid='1'
нет необходимости в JOINS:
DELETE m, um FROM messages m, usersmessages um
WHERE m.messageid = 1
AND m.messageid = um.messageid
Попробуйте это пожалуйста
DELETE FROM messages,usersmessages
USING messages
INNER JOIN usermessages on (messages.messageid = usersmessages.messageid)
WHERE messages.messsageid='1'
Попробуйте это.
DELETE a.*, b.*
FROM table1 as a, table2 as b
WHERE a.id=[Your value here] and b.id=[Your value here]
Я даю id
как образец столбца.
Рад, что это помогает.:)
*
) отображались правильно, вам нужно сделать отступ с 4 пробелами перед ним.