2015-04-12 157 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