我有一个名为 products 的 MySQL 表,其结构如下:
domain_id varchar(10),
data_source_id int(12),
id bigint(64),
title varchar(255)`
此表有一个插入后触发器,可将
domain_id
、data_source_id
和 id 的值插入到新表中。
我正在尝试使用以下查询将新记录插入产品表中:
INSERT INTO products (domain_id, data_source_id, id, title) VALUES ("12345678", 123, 8083207880923, "test")
但是,我遇到了错误
第 1 行“id”列的值超出范围。
如您所见,这是
BIGINT
列和数字“8083207880923”
完全在其范围内。此外,当触发器被移除时,错误就会消失。
我对为什么会发生这种情况感到无能为力和困惑。对此的任何帮助或指示都会非常有帮助。预先感谢!
表产品的DDL查询:
CREATE TABLE products (
domain_id varchar(16) NOT NULL,
data_sources_id int(12) UNSIGNED NOT NULL,
id bigint(64) NOT NULL,
title varchar(255) NOT NULL,
PRIMARY KEY (domain_id, data_sources_id, id)
);`
触发器正在更新数据的新表的DDL查询:
CREATE TABLE products_process (
id int(10) UNSIGNED NOT NULL AUTO_INCREMENT primary key,
domain_id varchar(10) NOT NULL,
data_sources_id int(10) NOT NULL,
product_id varchar(20) NOT NULL,
processed tinyint DEFAULT 0,
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
触发器的DDL查询:
CREATE TRIGGER product_insert_trigger
AFTER INSERT ON products
FOR EACH ROW
BEGIN
INSERT INTO products_process (domain_id, data_sources_id, product_id)
VALUES (NEW.domain_id, NEW.data_sources_id, NEW.id);
END;`
您已将列
domain_id
定义为 varchar(10)
,但您尝试插入的值(“8083207880923”)有 10 个数字。因此将domain_id更改为更大的长度。
我建议使用
VARCHAR(16)
,因为它在源表中也被定义为