【问题标题】:Mysql auto fill field based on value of two other fields?Mysql根据其他两个字段的值自动填充字段?
【发布时间】:2011-01-20 19:34:34
【问题描述】:

我知道它可以自动增加值,但我想知道是否可以根据其他两个字段的值填充一个字段。我有一个包含字段的表格:

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 来完成?

【问题讨论】:

  • @jiexi:代码总是受到赞赏,因为它简洁明了,并且比人类语言更清晰。我在猜测表结构。随时纠正它。

标签: mysql autocomplete subtraction


【解决方案1】:

是的,这可以通过为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 ;

进一步阅读:

【讨论】:

  • 想把我链接到教程吗?谢谢!
  • 我会把这个放在哪里?我使用的是 phpmyadmin 等价物。对不起,我是菜鸟:(
  • 另外,更新呢,当行更新时是否也会执行此检查?
  • @jiexi:检查这个关于触发器和 phpMyAdmin 的问题:stackoverflow.com/questions/2324924/where-i-write-mysql-trigger... 也用 UPDATEs 触发器更新我的答案。
  • 这将几乎工作。 MySQL 不支持这种INSERT OR UPDATE 构造。您必须编写 2 个单独的触发器。看我的回答。
【解决方案2】:

见: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 ;

【讨论】:

  • DELIMITER // 在每行开始的 pligg_links 上插入之前创建触发器 bir_links 设置 link_vote_total = NEW.link_votes - NEW.link_reports;结尾; // 在更新 pligg_links 之前为每一行开始创建触发器 bur_links SET link_vote_total = NEW.link_votes - NEW.link_reports;结尾; // 分隔符; failed : 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“DELIMITER // CREATE TRIGGER bir_links BEFORE INSERT ON pligg_links FOR EACH ROW”附近使用正确的语法我正在使用 virtualmin/webmin btw
猜你喜欢
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
相关资源
最近更新 更多