我有一個名爲age的列(int類型)的表。此列應該保持最大值50.如果超過,則不應更新該行。將最大值設置爲列
表示此列。如果我試圖更新到51 shold值爲從0到50
那麼就應該不允許。
任何人都可以幫助....!
我有一個名爲age的列(int類型)的表。此列應該保持最大值50.如果超過,則不應更新該行。將最大值設置爲列
表示此列。如果我試圖更新到51 shold值爲從0到50
那麼就應該不允許。
任何人都可以幫助....!
試試這個:
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
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);
做同樣的事情的更新。
你可以使用CHECK
約束:
CREATE TABLE person (
Name VARCHAR(80),
Age INT CHECK (Age BETWEEN 5 and 50));
不幸的是這不適用於MySQL。 – 2011-05-02 11:30:19
更糟的是,MySQL允許你使用這個定義創建一個表,但是這個約束被解析器忽略,而不是被添加到表中! – 2011-05-02 11:34:33
有沒有人知道在任何MySQL數據庫引擎的未來版本中是否會添加「CHECK」約束計劃? – 2011-05-02 11:36:36
爲什麼使用了錯誤的數據類型呢? ENUM是你需要的,而不是INT。 – 2011-05-02 11:19:23
我認爲觸發器是你的正確方法... – Marco 2011-05-02 11:19:49