所以之前我解釋一下我的問題,這裏有一些精簡表定義來幫助說明我的問題:與動態值的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