使用代碼http://forge.mysql.com/wiki/Triggers#Emulating_Check_Constraints
首先創建這個通用錯誤表
CREATE TABLE `Error` (
`ErrorGID` int(10) unsigned NOT NULL auto_increment,
`Message` varchar(128) default NULL,
`Created` timestamp NOT NULL default CURRENT_TIMESTAMP
on update CURRENT_TIMESTAMP,
PRIMARY KEY (`ErrorGID`),
UNIQUE KEY `MessageIndex` (`Message`))
ENGINE=MEMORY
DEFAULT CHARSET=latin1
ROW_FORMAT=FIXED
COMMENT='The Fail() procedure writes to this table twice to force a constraint failure.';
創建失敗的通用功能
DELIMITER $$
DROP PROCEDURE IF EXISTS `Fail`$$
CREATE PROCEDURE `Fail`(_Message VARCHAR(128))
BEGIN
INSERT INTO Error (Message) VALUES (_Message);
INSERT INTO Error (Message) VALUES (_Message);
END$$
DELIMITER ;
現在你武裝到任何表創建自定義的約束,比如你的
DELIMITER $$
create trigger mytable_check before insert on test.mytable for each row
begin
if new.id_category in ('list','of','special','categories')
and exists
(select * from mytable
where id_category=new.id_category
and keywords=new.keywords) then
call fail(concat('id_category,keywords must be unique when id_category is: ',new.id_category));
end if;
end $$
DELIMITER ;
UNIQUE(col2,col3)? – Khez 2011-04-08 09:17:16
如果這不是您所需要的,請更具體地說明一下您的代碼以及您需要的結果。 – Khez 2011-04-08 09:24:10
你是什麼意思,無需重複? – Khez 2011-04-08 09:35:07