0

很多天前,我创建了一个包含两个表的数据库:

  • 成员(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;
4

2 回答 2

1

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

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

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

于 2013-03-16T00:53:04.037 回答
0
ALTER TABLE account
ADD CONSTRAINT `fk_account_member` 
FOREIGN KEY (`member_id`)
REFERENCES `member` (`member_id`)
ON DELETE CASCADE
ON UPDATE CASCADE;
于 2013-03-16T00:04:42.883 回答