1

2 つのテーブルがあり、1 つはフロアです。各フロアには、Floor テーブルにある Floor_ID の外部キーを含む部屋を含めることができます。私はON CASCADE DELETEについて読んでいましたが、それは私の答えのようですが、それについて読んだことについて混乱しています。2 つのコマンドを含むルーチンを呼び出すことができることはわかっています。

DELETE FROM Room WHERE Floor_ID = floorID;
DELETE FROM Floor WHERE Floor_ID = floorID;

しかし、ON CASCADE DELETE を使用して同じことを実行するにはどうすればよいでしょうか? フロアを削除すると、そのフロアに関連付けられているすべての部屋も削除されます。

CREATE TABLE `Floor` (
`Floor_ID` int(11) NOT NULL AUTO_INCREMENT,
`Hub_ID` int(11) NOT NULL,
`FloorNum` int(11) NOT NULL,
`FloorName` varchar(45) DEFAULT NULL,
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`Hub_ID`,`FloorNum`),
UNIQUE KEY `Floor_ID_UNIQUE` (`Floor_ID`),
KEY `fk_Floor_Hub1_idx` (`Hub_ID`),
CONSTRAINT `fk_Floor_Hub1` FOREIGN KEY (`Hub_ID`) REFERENCES `Hub` (`Hub_ID`) ON DELETE   NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=124 DEFAULT CHARSET=latin1

CREATE TABLE `Room` (
`Room_ID` int(11) NOT NULL AUTO_INCREMENT,
`RoomLabel` varchar(45) NOT NULL,
`Floor_ID` int(11) NOT NULL,
`FloorArea` decimal(10,2) NOT NULL COMMENT 'Square feet',
`RoomHeight` decimal(10,2) DEFAULT NULL COMMENT 'Feet',
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`Room_ID`),
KEY `fk_Room_Floor1_idx` (`Floor_ID`),
CONSTRAINT `fk_Room_Floor1` FOREIGN KEY (`Floor_ID`) REFERENCES `Floor` (`Floor_ID`) ON   DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=259 DEFAULT CHARSET=latin1
4

1 に答える 1

2

外部キー制約を ON DELETE CASCADE として定義する必要があります。現在、あなたはそれらをNO ACTIONとして持っています。それらが CASCADE にある場合、削除されたレコードを参照しているすべてのレコードも削除されます。

于 2013-05-27T16:24:56.087 に答える