每当我尝试插入表Operand should contain 1 column(s)
时,都会出现sets
mysql错误。
我用Google搜索并发现了类似的问题,但它们总是针对解决他们的直接问题。顺便说一句,我有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`;
我没有看到我的日常生活中的任何问题。删除例程和触发器似乎会使问题消失。
答案 0 :(得分: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$$
答案 1 :(得分:0)
转义你的表名,它似乎是一个保留的功能。我不确定你是否在当地定义了一个。
INSERT INTO `sets` (tabler_name) VALUES ("leads_auto");
此外,您不能在单个数据库中拥有两个时间戳字段。将两个时间戳中的一个更改为DATETIME字段,如果它也导致问题
答案 2 :(得分:0)
除了在INSERT
语句中转义字段名称外,它无法进行太多改进。但它在我的测试环境中不会产生任何错误。这真的是给你一个错误的确切陈述吗?
但是,您的表定义中存在轻微问题,它会给您一个
表定义不正确;只能有一个TIMESTAMP列 在DEFAULT或ON UPDATE子句中使用CURRENT_TIMESTAMP。
正如错误消息所示,您只能使用timestamp
一个CURRENT_TIMESTAMP
列,如果您需要多个{{1}},则可以使用trigger执行此操作。