首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误1054 'NEW‘中的未知列'company_id’

错误1054 'NEW‘中的未知列'company_id’
EN

Stack Overflow用户
提问于 2014-04-25 00:09:19
回答 1查看 306关注 0票数 0

我有一个非常简单的触发器,它会间歇性地导致MySQL抛出错误1054“未知列'company_id‘in 'NEW'”

我的触发器定义为:

代码语言:javascript
复制
DELIMITER $$

CREATE TRIGGER `retrieve_quotes` 
    BEFORE INSERT 
    ON `company_tick_data_t`

    FOR EACH ROW BEGIN

        SET @r_code = NEW.r_code;

        SET NEW.`company_id` = 
            (
                SELECT id 
                FROM companies_t
                WHERE `r_code` = @r_code
                LIMIT 1
            );


    END $$

DELIMITER ;

我不理解的是,它在早期运行得很好,我检查了一下,以确保companies_t中存在列company_id。

以前,如果companies_t表中没有值,则company_id设置为NULL,或者如果记录存在,则显然设置为相应的company_id。就像我说的,我完全不明白为什么它现在不能工作。

任何关于这可能出错的地方的指示都将被感激地接收。我搜索并查看了其他解决方案,但它们都不符合我的场景,即在根据select查询的结果将值插入到表中之前更改该值。

EN

回答 1

Stack Overflow用户

发布于 2021-07-27 02:50:39

我知道这很古老,但是在我的数据库中有一个名为InventoryKey的列(在摆弄了存储过程之后),我也有过类似的头痛。这个字段是存在的,但是MySql没有!

代码语言:javascript
复制
mysql> describe Inventory;
    +-----------------------+---------------+------+-----+-------------------+----------------+
    | Field                 | Type          | Null | Key | Default           | Extra          |
    +-----------------------+---------------+------+-----+-------------------+----------------+
    | inventoryId           | int(11)       | NO   | PRI | NULL              | auto_increment |
    | inventoryKey          | char(8)       | YES  |     | NULL              |                |
    | inventoryBatchId      | int(11)       | YES  | MUL | NULL              |                |
    | inventoryStatusTypeId | int(11)       | YES  | MUL | NULL              |                |
    | inventoryCreationTime | timestamp     | NO   |     | CURRENT_TIMESTAMP |                |
    | inventoryBatchSerial  | int(3)        | YES  |     | NULL              |                |
    | inventoryComment      | varchar(1024) | YES  |     | NULL              |                |
    +-----------------------+---------------+------+-----+-------------------+----------------+
    7 rows in set (0.14 sec)

但是由于某种原因,错误中引用了另一个列名(inventoryGuid):

代码语言:javascript
复制
mysql>    insert into Inventory (inventoryKey) values (LEFT(MD5(RAND()),8));
ERROR 1054 (42S22): Unknown column 'inventoryGuid' in 'NEW'

在仔细检查了所有字段名称后,我得出结论,这是某种类型的损坏。重新启动SQL数据库无法解决此问题。最后,我重新创建了这个表,如下所示:

代码语言:javascript
复制
mysql> create table InventoryStaging like Inventory;                                                                                                                    
Query OK, 0 rows affected (0.62 sec) 

mysql> insert into InventoryStaging select * from Inventory;
Query OK, 4 rows affected (0.04 sec)

mysql> drop table Inventory;
Query OK, 0 rows affected (0.30 sec)

mysql> create table Inventory like InventoryStaging;                                                                                                                    
Query OK, 0 rows affected (0.80 sec)

mysql> insert into Inventory select * from InventoryStaging;                                                                                                            
Query OK, 4 rows affected (0.15 sec)
Records: 4  Duplicates: 0  Warnings: 0

..。然后,同样的命令成功了:

代码语言:javascript
复制
mysql> insert into Inventory (inventoryKey) values (LEFT(MD5(RAND()),8));                                                                                               
Query OK, 1 row affected (0.05 sec)

希望这能防止你在其他地方感到沮丧和脱发!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23274239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档