0

我在表上创建了一个触发器,当我尝试向其中插入数据时,我收到 MySql 错误“错误代码:1054 'unknown column license_key in field list'”

我尝试做的 INSERT 是这样的:

INSERT INTO LOAD_MASTER(license_key, state, total_pageviews, total_visitors, max_visitors, max_pageviews, ip, secret, read_time, url)
    VALUES ("order55555hytgtrfderfredfredfredftyu8ikloi98nhygt6", "preparing", 400, 1000, 200, 400, "202,2,35,36", "Hemmeligheden", 120, "http://google.dk");

我创建的触发器应该检查 TABLE LOAD_STATS 是否存在在 LOAD_MASTER 表中输入的 IP,然后根据结果更改另一个名为 LICENSE 的表中的值

我的触发器在这里:

    DELIMITER //
CREATE TRIGGER ip_check AFTER INSERT ON LOAD_MASTER FOR EACH ROW
BEGIN
DECLARE MK varchar(50);
DECLARE MIP varchar(15);
DECLARE LID int(6);

    SET MK = license_key;
    SET MIP = ip;
    SET LID = (
        SELECT l.license_id 
        FROM license_keys k, license l 
        WHERE l.license_id = k.license_id 
        AND k.license_key = MK
        );

    IF (SELECT COUNT(DISTICT(master_ip)) FROM LOAD_STATS WHERE master_ip = MIP AND master_key = MK ) > 3 THEN
        UPDATE LICENSE 
        SET STATE = 0 
        WHERE license_id = LID;
    END IF;
END
//
DELIMITER ; 

关于我为什么会收到此错误的任何帮助都会非常有用。

-担

4

1 回答 1

0

在这些行中

SET MK = license_key;
SET MIP = ip;

您可能打算分别解决NEW.license_keyNEW.ip

恕我直言,您可以更简洁。尝试这个

DELIMITER //
CREATE TRIGGER ip_check 
AFTER INSERT ON load_master 
FOR EACH ROW
BEGIN
    IF (SELECT COUNT(DISTICT(master_ip)) 
          FROM load_stats 
         WHERE master_ip = NEW.ip 
           AND master_key = NEW.license_key ) > 3 THEN
        UPDATE license 
           SET state = 0 
         WHERE license_id = 
              (
                SELECT l.license_id 
                  FROM license_keys k JOIN license l 
                    ON l.license_id = k.license_id 
                   AND k.license_key = NEW.license_key
              ); -- make sure that this subquery returns only ONE record
    END IF;
END //
DELIMITER ;

用 JOIN重写UPDATE而不是使用子查询有一些改进的余地

于 2013-06-01T07:55:49.093 回答