在一个项目中,数据库是mysql,对一个表的删除同时要关联者其他两个表,如:一张客户业务表,CREATE TABLE `jz_gbmes` ( 
  `g_id` int(10) unsigned NOT NULL auto_increment, 
  `gb_id` int(11) unsigned default NULL, 
  `bs_id` int(11) unsigned default NULL, 
  `gt_id` int(11) unsigned default NULL, 
  `remindtype` int(11) default NULL,// 0 year;1 month;2 seseaon 
  `stmonth` varchar(10) default NULL, 
  `stday` varchar(10) default NULL, 
  `endmonth` varchar(10) default NULL, 
  `enday` varchar(10) default NULL, 
  `account_id` int(11) default NULL 
   ..... 

一张操作记录表,每次完成业务都会有一条业务记录: 
CREATE TABLE `jz_stream` ( 
  `op_id` int(10) unsigned NOT NULL auto_increment, 
  `account_id` int(11) unsigned default NULL, 
  `gb_id` int(11) unsigned default NULL, 
  `bs_id` int(11) unsigned default NULL, 
  `bs_time` varchar(10) default NULL, 
...... 

每个月都会自动生成一张业务计划表: 
CREATE TABLE `jz_business_plan` ( 
  `bp_id` int(10) unsigned NOT NULL auto_increment, 
  `account_id` int(11) unsigned default NULL, 
  `gb_id` int(11) unsigned default NULL, 
  `bs_id` int(11) unsigned default NULL, 
  `results` varchar(10) default NULL, 
...... 

在删除客户业务时,首先判断一下jz_stream中有没有当前月的该客户的记录,如果没有就删除业务计划表中客户业务计划的记录,用触发器我该怎么做呢?删除操作条件的传递很困惑,老大,有没有好的建议?谢谢! 

解决方案 »

  1.   

    业务计划表名字是:jz_plan.
    假设jz_stream和jz_gbmes和jz_plan 通过一个ID关联。我没有看出来你这里面是怎么个关系。暂时如我给的例子。DELIMITER $$CREATE
        TRIGGER `<Database Name>`.`ff` AFTER DELETE
        ON `<Database Name>`.`jz_gbmes`
        FOR EACH ROW BEGIN
          if not exists (select 1 from jz_stream where ID = OLD.ID) then
            delete from jz_plan where ID = OLD.ID;
          end if;
        END$$DELIMITER ;
      

  2.   

    你是说我应该让这三个表用id关联一下:
    我现在把表这样修改:
    一张客户业务表,CREATE TABLE `jz_gbmes` ( 
      `g_id` int(10) unsigned NOT NULL auto_increment, 
      `gb_id` int(11) unsigned default NULL, 
      `bs_id` int(11) unsigned default NULL, 
      `gt_id` int(11) unsigned default NULL, 
      `remindtype` int(11) default NULL,// 0 year;1 month;2 seseaon 
      `stmonth` varchar(10) default NULL, 
      `stday` varchar(10) default NULL, 
      `endmonth` varchar(10) default NULL, 
      `enday` varchar(10) default NULL, 
      `account_id` int(11) default NULL 
      ..... 

    一张操作记录表,每次完成业务都会有一条业务记录: 
    CREATE TABLE `jz_stream` ( 
      `op_id` int(10) unsigned NOT NULL auto_increment, 
      `account_id` int(11) unsigned default NULL, 
      `g_id` int(11) unsigned default NULL,  
      `bs_time` varchar(10) default NULL, 
    ...... 

    一张操作记录表,每次完成业务都会有一条业务记录: 
    CREATE TABLE `jz_stream` ( 
      `op_id` int(10) unsigned NOT NULL auto_increment, 
      `account_id` int(11) unsigned default NULL, 
      `g_id` int(11) unsigned default NULL, 
      `bs_time` varchar(10) default NULL, 
    ...... 

    每个月都会自动生成一张业务计划表: 
    CREATE TABLE `jz_business_plan` ( 
      `bp_id` int(10) unsigned NOT NULL auto_increment, 
      `account_id` int(11) unsigned default NULL, 
      `g_id` int(11) unsigned default NULL,  
      `results` varchar(10) default NULL, 
    ...... 

    是不是这样以后,再调用你说的那种方法就可以了?