Mysql Relations相关行未正确更新

时间:2012-03-21 01:46:58

标签: mysql relational-database

当p_operators中的OPID为状态1时,会出现问题 n_notify表所有状态行udating 1 我希望它只应更新相关的op_id状态...

`p_operators` (
  `opID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `status` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`opID`),
  KEY `status` (`status`)
) ENGINE=InnoDB;

`n_notify` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `op_id` int(10) unsigned NOT NULL,
  `email` varchar(155) NOT NULL,
  `status` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `status` (`status`),
  KEY `op_id` (`op_id`)
) ENGINE=InnoDB ;

ALTER TABLE `n_notify`
  ADD CONSTRAINT `n_notify_ibfk_2` FOREIGN KEY (`op_id`) REFERENCES `p_operators` (`opID`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `n_notify_ibfk_1` FOREIGN KEY (`status`) REFERENCES `p_operators` (`status`) ON DELETE CASCADE ON UPDATE CASCADE;


p_operators values
opID    status
5   0
13  1

n_notify values
id  op_id   email   status
2   13  XX  1
3   5   XX  1

1 个答案:

答案 0 :(得分:1)

您的第二个约束将status中的p_operatorsstatus中的n_notify联系起来,这意味着更改p_operators中的状态会更改所有 statusn_notify的值相等。

由于您不希望级联状态本身,而是按行ID状态,您不需要约束,只需要触发器。

经验法则:

  • 如果您只需要一个字段,请使用约束
  • 如果您需要两个或多个字段(要识别的ID,要更改的状态),请使用触发器