2010-02-25 108 views
2

我知道它可能会自动增加值,但我想知道是否可以根据其他两个字段的值填充字段。我与字段的表:Mysql根据两个其他字段的值自动填充字段?

CREATE TABLE pligg_links (
    ... 
    link_votes INT, 
    link_reports INT, 
    link_votes_total INT, 
    ... 
); 

场link_votes_total应持有从link_reports减去场link_votes的价值。所以基本上,这是数学公式:link_votes_total = link_votes - link_reports。这是可能的,而不必在数据存储之前使用php来做到这一点?

+1

@jiexi:代码总是被赞赏,因为它简洁明了,比人类语言更清晰。我在猜测桌子的结构。随时纠正它。 – outis 2010-02-25 01:30:41

回答

3

是的,这可以通过创建BEFORE INSERT触发,另一个用于BEFORE UPDATE来完成:

DELIMITER // 

CREATE TRIGGER trig_mytable BEFORE INSERT ON my_table 
FOR EACH ROW 
BEGIN 
    SET NEW.link_votes_total = NEW.link_votes - NEW.link_reports; 
END 
// 

CREATE TRIGGER trig_mytable BEFORE UPDATE ON my_table 
FOR EACH ROW 
BEGIN 
    SET NEW.link_votes_total = NEW.link_votes - NEW.link_reports; 
END 
// 

DELIMITER ; 

延伸阅读:

+0

小心将我链接到教程?谢谢! – jiexi 2010-02-25 01:20:20

+0

RTM:http://dev.mysql.com/doc/refman/5.1/en/triggers.html – outis 2010-02-25 01:24:55

+0

我会在哪里放置这个?我使用phpmyadmin等价物。 对不起,我是一个noob :( – jiexi 2010-02-25 01:25:44

1

参见:http://dev.mysql.com/doc/refman/5.1/en/triggers.html

DELIMITER // 

CREATE TRIGGER bir_links 
BEFORE INSERT ON links 
FOR EACH ROW 
BEGIN 
    SET link_votes_total = NEW.link_votes - NEW.link_reports; 
END; 
// 

CREATE TRIGGER bur_links 
BEFORE UPDATE ON links 
FOR EACH ROW 
BEGIN 
    SET link_votes_total = NEW.link_votes - NEW.link_reports; 
END; 
// 

DELIMITER ; 
+0

DELIMITER // CREATE TRIGGER bir_links BEFORE INSERT ON pligg_links FOR EACH ROW BEGIN SET link_vote_total = NEW.link_votes - NEW.link_reports;结束; // CREATE TRIGGER bur_links在更新之前pligg_links FOR EACH ROW BEGIN SET link_vote_total = NEW.link_votes - NEW.link_reports;结束; // DELIMITER;失败:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行'DELIMITER // CREATE TRIGGER bir_links之前插入在pligg_links FOR EACH ROW'附近使用正确的语法 使用virtualmin/webmin btw – jiexi 2010-02-25 01:38:50

相关问题