错误:在 MySQL 中使用插入后触发器时,列“id”的值超出范围

问题描述 投票:0回答:1

我有一个名为 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;`
mysql triggers
1个回答
0
投票

您已将列

domain_id
定义为
varchar(10)
,但您尝试插入的值(“8083207880923”)有 10 个数字。因此将domain_id更改为更大的长度。

我建议使用

VARCHAR(16)
,因为它在源表中也被定义为

© www.soinside.com 2019 - 2024. All rights reserved.