2015-04-12 155 views
1

我知道這是一個簡單的問題,但我沒有找到答案的任何地方。刪除觸發條件時

這就是我的表:

city | CREATE TABLE `city` (
    `ID` int(11) NOT NULL, 
    `Name` char(35) NOT NULL DEFAULT '', 
    `CountryCode` char(3) NOT NULL DEFAULT '', 
    `District` char(20) NOT NULL DEFAULT '', 
    `Population` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`ID`), 
    KEY `FKcode99` (`CountryCode`), 
    CONSTRAINT `FKcode99` FOREIGN KEY (`CountryCode`) REFERENCES `country` (`code`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 

的問題是:如果你想刪除一個城市,人口必須275,000以下。

我試圖

ALTER TABLE `world`.`city` 
RENAME TO `world`.`DeleteCity` ; 
USE `world`; 

DELIMITER $$ 

DROP TRIGGER IF EXISTS world.DeleteCity_ADEL$$ 
USE `world`$$ 


CREATE TRIGGER `DeleteCity_ADEL` AFTER DELETE ON `DeleteCity` FOR EACH ROW 
IF (OLD.population <= 275000) THEN 
    DELETE FROM city WHERE NEW.name=OLD.name; 
END IF; 
$$ 
DELIMITER ; 

,但它不工作。有誰能夠幫助我?

回答

0

我會做這樣:

CREATE TRIGGER `DeleteCity_ADEL` BEFORE DELETE ON `DeleteCity` FOR EACH ROW 
IF (OLD.population > 275000) THEN 
    SIGNAL SQLSTATE '45123' 
     SET MESSAGE_TEXT = 'If you want to delete a city, the population must be 275,000 or less.'; 
END IF; 
/

該觸發器引發時有人爲試圖刪除與人口> 275,000記錄的錯誤,並返回一個明確的解釋(錯誤消息)給他。
如果人口少於或等於275,000,則記錄將被悄悄刪除。

+0

它適用於我。謝啦! – ghost