2014-02-13 99 views
1

我想更改表上的整數列以添加檢查約束,以防止值爲零或正數。例如:如何在MySQL中創建需要負值的CHECK約束?

CREATE TABLE example (id INTEGER) 
ALTER TABLE example ADD CONSTRAINT chk_negID CHECK (id<0) 

的MySQL愉快地與這些規定尚未就允許以下:

INSERT INTO example VALUES (-1); 
INSERT INTO example VALUES (1); 

實際上並沒有被加了我的限制?有沒有辦法列出創建後添加到表中的約束?

+0

這看起來好像您需要在應用程序層處理它,因爲MySQL不支持此功能。 –

+0

MySQL中沒有'CHECK'約束。你需要寫一個觸發器。 – AgRizzo

+0

@AgRizzo:如果這只是一種從觸發器中終止執行的好方法。 – zerkms

回答

2

這是可行的,但可能很難調試。這是一個觸發器:

DELIMITER $$; 
CREATE TRIGGER my_trigger AFTER INSERT ON my_table 
FOR EACH ROW 
BEGIN 
IF(OLD.id <= 0) 
    THEN 
    DELETE FROM my_table where id = OLD.id; 
END IF; 
END 
+0

準確地說 - 用戶可能沒有'DELETE'權限 – zerkms

+1

我們不能假定他確實沒有@zerkms –

+0

。這只是一個注意,這種解決方案可能無法在某些情況下工作。 – zerkms