0

何日前にも、2つのテーブルを持つデータベースを作成しました。

  • member(member_id(PK)、name)
  • account(account_id(PK)、member_id(FK)、amount)。

したがって、通常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 に答える