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)
如果您使用带有"on delete cascade"的外键,则可以通过db-system完成此操作.
看看这里:http: //dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html