2011-05-02 123 views
4

我有一個名爲age的列(int類型)的表。此列應該保持最大值50.如果超過,則不應更新該行。將最大值設置爲列

表示此列。如果我試圖更新到51 shold值爲從0到50

那麼就應該不允許。

任何人都可以幫助....!

+0

爲什麼使用了錯誤的數據類型呢? ENUM是你需要的,而不是INT。 – 2011-05-02 11:19:23

+3

我認爲觸發器是你的正確方法... – Marco 2011-05-02 11:19:49

回答

5

試試這個:

CREATE TRIGGER check_trigger 
    BEFORE INSERT 
    ON table 
    FOR EACH ROW 
BEGIN 
    IF NEW.age<0 OR NEW.age>50 THEN 
    CALL `Error: Wrong values for age`; -- this trick will throw an error 
    END IF; 
END 
+0

+1 Lol。同一時刻發佈。 ;) – 2011-05-02 11:29:26

+0

是的,它發生了很多時間給我! :) +1對你也 – Marco 2011-05-02 11:30:22

+1

對於@Gnanendra:@nick rulez設置年齡爲null,如果用戶插入錯誤的東西;我的例子提出了一個錯誤。使用你認爲最適合你的情況! – Marco 2011-05-02 11:32:29

3
create table test (
age tinyint not null) engine = myisam; 

delimiter // 
drop trigger if exists max_num// 
create trigger max_num before insert on test 
for each row 
begin 
if new.age < 0 or new.age > 50 then 
set new.age = null; 
end if; 
end// 
delimiter ; 

insert into test (age) values (100); 

做同樣的事情的更新。

0

你可以使用CHECK約束:

CREATE TABLE person (
Name VARCHAR(80), 
Age INT CHECK (Age BETWEEN 5 and 50)); 
+1

不幸的是這不適用於MySQL。 – 2011-05-02 11:30:19

+4

更糟的是,MySQL允許你使用這個定義創建一個表,但是這個約束被解析器忽略,而不是被添加到表中! – 2011-05-02 11:34:33

+2

有沒有人知道在任何MySQL數據庫引擎的未來版本中是否會添加「CHECK」約束計劃? – 2011-05-02 11:36:36

相關問題