问题描述:
有2张表,Thread,Post。Thread表:
CREATE TABLE  `thread` (
  `id` int(11) NOT NULL,
  `board_id` int(11) default NULL,
  `createtime` datetime default NULL,
  `iselite` tinyint(4) default NULL,
  `view` int(11) default NULL,
  `lastauthor` varchar(80) default NULL,
  `lastposttime` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='主题';
Post表:
CREATE TABLE  `post` (
  `id` int(11) NOT NULL,
  `author_id` int(11) default NULL,
  `thread_id` int(11) default NULL,
  `subject` varchar(80) default NULL,
  `content` mediumtext,
  `first` tinyint(1) default NULL,
  `posttime` datetime default NULL,
  `ip` varchar(16) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='贴子';现在我想实现删除Thread表中某条记录,Post表中相关的记录一起被删除/
就是论坛当中的删除主题,与该主题相关的帖子也OVER的功能。请问在MySql当中如何写SQL语句呢?

解决方案 »

  1.   

    如果是MYSQL5,可以用触发器,在THREAD表删记录时删除POST中的相关记录
    也可以用程序删,不过就要多向数据库发一次QUERY
      

  2.   

    可以说的详细点吗,或者有相关的资料吗,对于此我菜鸟一个。
    我用的是mysql5的,[email protected]我的邮箱。
      

  3.   

    --  你可以有两种选择,一个是用数据库的外键约束的级联删除,一个是使用触发器.推荐使用外键约束.--  外键约束CREATE TABLE  `post` (
      `id` int(11) NOT NULL,
      `author_id` int(11) default NULL,
      `thread_id` int(11) default NULL,
      `subject` varchar(80) default NULL,
      `content` mediumtext,
      `first` tinyint(1) default NULL,
      `posttime` datetime default NULL,
      `ip` varchar(16) default NULL,
      PRIMARY KEY  (`id`),
      foreign key(thread_id) references thread(id) on delete cascade 
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='贴子';这样当你删除Thread的一条记录的时候,它会级联删除Post表的相关记录.
      

  4.   

    昨天晚上在http://freeweb.nyist.net/~chairy/blog/feed.php也看到用数据库的外键约束的级联删除,不过怎么试都不行,
    不过刚才复制你的语句进去又行,真的又行了.^_^
    谢谢mschen(Co-ok) ,ping027(平).