3

Operand should contain 1 column(s)每当我尝试插入表时都会出现mysql 错误sets

我在谷歌上搜索并发现了一大堆类似的问题,但它们总是针对解决他们当前的问题。顺便说一句,我有 mysql 5.6。我被允许多个 TIMESTAMPS。

这是我的代码:

INSERT INTO `sets` (`tabler_name`) VALUES ("leads_auto");

这是我的桌子:

CREATE TABLE IF NOT EXISTS `lms`.`sets` (
    `set_id` BIGINT NOT NULL AUTO_INCREMENT,
    `on_off` SMALLINT NOT NULL DEFAULT 0,
    `tabler_name` VARCHAR(45) NULL,
    `origin_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `last_modified_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `original_count` INT NULL,
    `current_count` INT NULL,
    `source_type` VARCHAR(45) NULL,
    `source` VARCHAR(45) NULL,
    `method` VARCHAR(45) NULL,
    `agent` VARCHAR(45) NULL,
    `dupes` INT NULL,
    `bads` INT NULL,
    `aged` INT NULL COMMENT 'This table keeps track of the record sets that enter the system.        Example: a set of leads imported into the database.',
    PRIMARY KEY (`set_id`)
) ENGINE = InnoDB;

存储过程:

DELIMITER //

CREATE PROCEDURE `lms`.`leads_to_bak` ()
BEGIN
SET @table1 = (SELECT `tabler_name` FROM sets WHERE on_off=0 LIMIT 1);
SET @table2 = CONCAT(@table1, '_bak');
SET @SQL1 = CONCAT('INSERT INTO ',@table2, '(', (SELECT
REPLACE(GROUP_CONCAT(COLUMN_NAME), 'lead_id,', '') FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table2), ')', ' SELECT ', (SELECT                                                                   REPLACE(GROUP_CONCAT(COLUMN_NAME), 'lead_id,', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE       TABLE_NAME = @table1), ' FROM ', @table1);
PREPARE stmt FROM @sql1;
EXECUTE stmt;
END//

DELIMITER ;
USE `lms`;

扳机

DELIMITER $$

USE `lms`$$

CREATE TRIGGER `lms`.`after_insert_into_leads`
AFTER INSERT ON `sets` FOR EACH ROW
BEGIN
IF (SELECT * FROM sets WHERE on_off=0 LIMIT 1) THEN
CALL lms.leads_to_bak();
END IF;
END$$

DELIMITER ;
USE `lms`;

我看不出我的日常生活有什么问题。删除例程和触发器似乎使问题消失了。

4

3 回答 3

3

在你的触发器中,你的意思是放在EXISTS后面IF吗?像这样:

CREATE TRIGGER `lms`.`after_insert_into_leads`
AFTER INSERT ON `sets` FOR EACH ROW
BEGIN
IF EXISTS (SELECT * FROM sets WHERE on_off=0 LIMIT 1) THEN
CALL lms.leads_to_bak();
END IF;
END$$
于 2012-09-24T12:54:33.863 回答
0

除了在你的 -statement 中转义字段名称INSERT之外,它并没有太大的改进。但它不会在我的测试环境中产生任何错误。这真的是给您带来错误的确切陈述吗?

但是,您的表定义中有一个小问题,它会给您一个

表定义不正确;在 DEFAULT 或 ON UPDATE 子句中只能有一个带有 CURRENT_TIMESTAMP 的 TIMESTAMP 列。

如错误消息所示,您只能将一timestamp列与 一起使用CURRENT_TIMESTAMP,如果您需要多个,您可以使用触发器来执行此操作。

于 2012-09-24T04:07:01.790 回答
0

转义你的表名,它似乎是一个保留功能。我不确定您是否在本地定义了一个。

INSERT INTO `sets` (tabler_name) VALUES ("leads_auto");

此外,您不能在单个数据库 afaik 中有两个时间戳字段。如果它也导致您出现问题,请将两个时间戳之一更改为 DATETIME 字段

于 2012-09-24T04:02:25.770 回答