所以之前我解释一下我的问题,这里有一些精简表定义来帮助说明我的问题:与动态值的MySql条件插入
-- Holds data about different memberships
CREATE TABLE IF NOT EXISTS `Member_Types` (
`ID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(20) NOT NULL,
`Description` VARCHAR(255) NOT NULL,
`Member_Limit` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY(`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `Member_Types` (`ID`, `Name`, `Description`, `Member_Limit`) VALUES
(1, 'General Member', 'Description of this membership.', 00),
(2, 'Extended Member', 'Description of this membership.', 00),
(3, 'Premium Member', 'Description of this membership.', 00),
(4, 'General Administrator', 'Description of this membership.', 05),
(5, 'Master Administrator', 'Description of this membership.', 01);
-- Stores the basic data about our site members
CREATE TABLE IF NOT EXISTS `Member_Infos` (
`ID` BIGINT(8) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
`Username` VARCHAR(30) NOT NULL UNIQUE,
`Password` CHAR(41) NOT NULL,
`EmailAddr` VARCHAR(100) NOT NULL,
`Type_ID` INT UNSIGNED NOT NULL,
`Salt_ID` BIGINT(8) UNSIGNED ZEROFILL NOT NULL,
PRIMARY KEY(`ID`),
FOREIGN KEY(`Type_ID`) REFERENCES `Member_Types` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
的Member_Infos表包含结合Member_Infos.Type_ID =外键Member_Types.ID
的Member_Types表具有列Member_Limit其包含表示所述Member_Infos表 可以包含的记录的最大数目,其中其TYPE_ID等于一个整数Member_Types.ID
我能写一个检查约束,但显然mysql不检查约束。 我想编写一个触发器,检查member_infos表中的记录数是否为< =插入前的Member_Types.Member_Limit。 例如:使用上面的数据,记录4的Member_Limit = 5。如果尝试将新记录插入到Member_Infos表中, 的Type_ID = 4,并且Member_Infos表中的记录数与Type_ID < = 5比数据被插入,否则被拒绝。 任何意见将不胜感激。
我会说触发想法可能是最好的。 – Aatch
高度赞赏的问题。希望答案也是:) – Sami