2011-04-08 3 views
0

내가 열삽입 값은

COL1 (기본 키) COL2 (null이 아닌) COL3 (NOT NULL)이있는 테이블을 구성해야 행의 그룹에 대한 반복하지 않도록 테이블에 제약 조건을 구현하는 방법 (null이 아닌) col4

지금은 구현해야되는 제약 조건은 무엇인가 .... COL3에 삽입 값이 COL2의 값 세트를 반복하지 않도록이 테이블에 값을 삽입해야합니까? ? ...

값은 col3 전체에서 반복 될 수 있습니다 ... 그러나 col3에있는 col2 값의 일부 집합은 반복 할 필요가 없습니다. 그래서 이것은 열 이름입니다. Keywords 열에서
IDID_CategoryKeywordsScore

값은 반복 할 수 있습니다 -하지만 ID_Category에서 일부 값, Keywords 값은 반복 할 필요가 없습니다. 이것을 어떻게 구현할 수 있습니까?

+2

UNIQUE (col2, col3)? – Khez

+0

그것이 필요한 것이 아니라면, 좀 더 구체적으로, 가지고있는 코드와 필요한 결과를 보여주십시오. – Khez

+0

반복 할 필요가 없다는 것은 무엇을 의미합니까? – Khez

답변

1

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 ; 
+0

감사합니다 ... 나는 이것을 시도 할 것입니다 ... – gks

+0

어떤 값들이 괄호 안에 들어 있습니까? ------------------ new.id_category in ('list', 'of' ','special ','categories ') – gks

+0

이 줄을 설명 할 수 있습니까? ---- new.id_category in ('list ','of ','special ','categories ') – gks