代码之家  ›  专栏  ›  技术社区  ›  BlackHatSamurai

复杂的MYSQL触发器

  •  0
  • BlackHatSamurai  · 技术社区  · 12 年前

    我正在尝试在中创建触发器 mysql 当填充另一个表(wp_usermeta)时,它将填充一个新表(customers)。我知道这可能是一个糟糕的设计,但我现在的处境是 wp_usermeta 不会一直被填充,我需要确保 customers 总是有我需要的数据。

    为了做到这一点,我认为创建触发器将是实现这一目标的最佳方式,但它根本不起作用。

    以下是我所拥有的:

    CREATE       TRIGGER `update_customers` AFTER INSERT ON `wp_usermeta`
    FOR EACH
    ROW BEGIN
    INSERT INTO test_customers
    SET test_customers.first_name = new.meta_value;
    
    END
    

    我这样做只是为了复制 wp_用户元数据 数据转移到 customer 桌子,但那没用。触发器已被接受 数据库 但当我将数据添加到 wp_用户元数据 桌子

    我遇到的一个问题是,我只想把名字、姓氏、地址等信息填充到 客户 数据库这个 wp_用户元数据 表格如下所示:

    enter image description here

    正如您所看到的,该表是用键/值对设置的。所以我面临的问题是 wp_usermeta.first_name 转移到 customers.first_name .

    我对这类事情或一般的数据库没有太多经验。

    以下是我尝试的另一个查询:

    TRIGGER `update_customers` AFTER INSERT ON `wp_usermeta`
    FOR EACH
    ROW BEGIN
    INSERT INTO test_customers SET test_customers.first_name = wp_usermeta.meta_value WHERE wp_usermeta.meta_key == first_name;
    
    END
    

    但这也没有奏效。如果有人能解释如何确定 meta_key 等于 first_name 然后应用相应的 wp_usermeta.meta_value 值到 客户名字 桌子,那就太好了。

    如果触发不是完成我想做的事情的最佳方式,我也愿意接受建议。

    1 回复  |  直到 12 年前
        1
  •  1
  •   Filipe Silva    12 年前

    试试这样的方法:

    CREATE TRIGGER `update_customers` AFTER INSERT ON `wp_usermeta`
    FOR EACH ROW 
    BEGIN
      IF NEW.meta_key = 'first_name' AND NEW.meta_value IS NOT NULL THEN
        INSERT INTO test_customers(first_name) Values(NEW.meta_value);
      END IF;
    END;
    

    sqlfiddle demo