外键不保持数据一致性

时间:2013-03-15 23:52:00

标签: mysql foreign-keys

前几天我创建了一个有两个表的数据库:

  • 构件(member_id(PK),名称)
  • 帐户(ACCOUNT_ID(PK),member_id(FK),量)。

通常,如果会员在帐户表中有余额,我就不能DELETE任何会员。在它运作良好之前。 但今天我导入相同的脚本,我可以删除一个成员甚至会员在帐户表中有余额。

我不知道发生了什么?我不记得以前的服务器版本的mysql。现在我正在运行mysql 5.5.16,MySQL客户端版本是mysqlnd 5.0.8-dev - 20102224 - Revision: 310735 in localhost

我的代码是

//account table
CREATE TABLE IF NOT EXISTS `account` (
   `account_id` int(11) NOT NULL AUTO_INCREMENT,
   `member_id` int(11) NOT NULL,
   `dates` date NOT NULL,
   `amount` float NOT NULL,
   PRIMARY KEY (`account_id`),
   KEY `FK_account_1` (`member_id`)
   ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

//member table
CREATE TABLE IF NOT EXISTS `member` (
  `member_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `account_num` int(11) NOT NULL,
  PRIMARY KEY (`member_id`)
  ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ;

//and this code
ALTER TABLE `account`
  ADD CONSTRAINT `FK_account_1`
    FOREIGN KEY (`member_id`) 
    REFERENCES `member`(`member_id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE;

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解这一点但是:

您拥有的约束意味着每次删除成员时,该成员将与其在帐户表中的任何余额一起被删除。 (ON DELETE CASCADE

如果这不是您想要的行为,并且您希望mysql在删除具有余额的成员时引发异常;然后从约束定义中删除 ON DELETE CASCADE

答案 1 :(得分:0)

ALTER TABLE account
ADD CONSTRAINT `fk_account_member` 
FOREIGN KEY (`member_id`)
REFERENCES `member` (`member_id`)
ON DELETE CASCADE
ON UPDATE CASCADE;