我有一个非常简单的触发器,它会间歇性地导致MySQL抛出错误1054“未知列'company_id‘in 'NEW'”
我的触发器定义为:
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查询的结果将值插入到表中之前更改该值。
发布于 2021-07-27 02:50:39
我知道这很古老,但是在我的数据库中有一个名为InventoryKey的列(在摆弄了存储过程之后),我也有过类似的头痛。这个字段是存在的,但是MySql没有!
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):
mysql> insert into Inventory (inventoryKey) values (LEFT(MD5(RAND()),8));
ERROR 1054 (42S22): Unknown column 'inventoryGuid' in 'NEW'在仔细检查了所有字段名称后,我得出结论,这是某种类型的损坏。重新启动SQL数据库无法解决此问题。最后,我重新创建了这个表,如下所示:
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..。然后,同样的命令成功了:
mysql> insert into Inventory (inventoryKey) values (LEFT(MD5(RAND()),8));
Query OK, 1 row affected (0.05 sec)希望这能防止你在其他地方感到沮丧和脱发!
https://stackoverflow.com/questions/23274239
复制相似问题