从多个表中删除行

AdR*_*ock 8 mysql delete-row sql-delete

我正在尝试使用SQL从连接在一起的多个表中删除多个行.

表A与表B相连.表B与表C相连

我想删除表B和C中与表A中的行对应的所有行

CREATE TABLE `boards` (
  `boardid` int(2) NOT NULL AUTO_INCREMENT,
  `boardname` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY  (`boardid`)
);

-- --------------------------------------------------------

-- 
-- Table structure for table `messages`
-- 

CREATE TABLE `messages` (
  `messageid` int(6) NOT NULL AUTO_INCREMENT,
  `boardid` int(2) NOT NULL DEFAULT '0',
  `topicid` int(4) NOT NULL DEFAULT '0',
  `message` text NOT NULL,
  `author` varchar(255) NOT NULL DEFAULT '',
  `date` datetime DEFAULT NULL,
  PRIMARY KEY  (`messageid`)
);

-- --------------------------------------------------------

-- 
-- Table structure for table `topics`
-- 

CREATE TABLE `topics` (
  `topicid` int(4) NOT NULL AUTO_INCREMENT,
  `boardid` int(2) NOT NULL DEFAULT '0',
  `topicname` varchar(255) NOT NULL DEFAULT '',
  `author` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY  (`topicid`)
);
Run Code Online (Sandbox Code Playgroud)

Cha*_*rch 19

好吧,如果你使用过InnoDB表,你可以设置一个带外键级联删除,它可以自动完成.但是如果您有使用MyISAM的原因,您只需使用多表DELETE:

DELETE FROM boards, topics, messages
USING boards INNER JOIN topics INNER JOIN messages
WHERE boards.boardid = $boardid
    AND topics.boardid = boards.boardid
    AND messages.boardid = boards.boardid;
Run Code Online (Sandbox Code Playgroud)


Ber*_*Ott 6

如果您使用带有"on delete cascade"的外键,则可以通过db-system完成此操作.

看看这里:http: //dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html