2013-03-26 56 views
0

創建表格時,是否可以根據兩列的計算值聲明約束?MySQL:使用計算約束創建表格

這裏是僞代碼解釋什麼是我想要做的事:

CREATE TABLE employee_comments(
    id int(11), 
    user_id int(11), 
    franchise_branch_id int(11) default 0, 
    corporate_branch_id int(11) default 0, 
    primary key id, 
    key corp_xor_franch(corporate_branch_id + franchise_branch_id > 0) 
) 

基本上,用戶在任何公司層面或專營權水平插入註釋。根據評論,任何一個都可以留空,但至少必須聲明一個。

+0

我敢肯定,MySQL不支持此。但請參閱:http://stackoverflow.com/questions/5422729/mysql-computed-column – siride 2013-03-26 13:19:04

+0

爲什麼你不只有一個'branch_id'(它可能有'FOREIGN KEY'約束到'branch')? – 2013-03-26 13:24:11

+0

插入和更新觸發器如何檢查值是否正確?請參閱觸發器文檔http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html – 2013-03-26 13:44:33

回答

1

你最好的選擇可能是使用觸發器 - 在這裏http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

MySQL文檔使用信息,從How to abort INSERT operation in MySql trigger?這樣的例子應該有助於

CREATE TRIGGER checkFieldsValid 
BEFORE INSERT ON employee_comments 
FOR EACH ROW BEGIN 

    DECLARE errmsg VARCHAR(255) DEFAULT "REQUIRED DATA NOT FOUND"; 

    IF NOT NEW.franchise_branch_id = 0 XOR NEW.corporate_branch_id = 0 THEN 

     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = errmsg; 

    END IF; 
END; 
+0

一些有趣的東西。謝謝。我會研究你提供的兩個參考。 – 2013-03-27 15:43:57