【问题标题】:#1136 - Column count doesn't match value count at row 1 // when trying to INSERT in new data#1136 - 列计数与第 1 行的值计数不匹配 // 尝试插入新数据时
【发布时间】:2021-06-16 03:05:55
【问题描述】:

我是 SQL 新手,并使用 phpmyadmin 上课。我试图在我的表中插入一个新行,以让我的触发器审计日志显示更改。但是,每次我尝试插入时,都会出现 1136 错误。我试图重写它,删除员工表,并用新员工重新填充它。每当我运行下面写的 INSERT 时,都会发生错误。有关导致此错误的原因的任何指导。

INSERT INTO `employee` (id, employee_fname, employee_lname, employee_gender)
VALUES (7, Jack, McQ, Male);

下面是我正在插入的当前表格。

CREATE TABLE `employee` (
  `id` int(2) NOT NULL,
  `employee_fname` varchar(25) NOT NULL,
  `employee_lname` varchar(25) NOT NULL,
  `employee_gender` varchar(25) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;



INSERT INTO `employee` (`id`, `employee_fname`, `employee_lname`, `employee_gender`) VALUES
(1, 'Jane', 'Austin', 'Female'),
(2, 'Walt', 'Whitman', 'Male'),
(3, 'George', 'Martin', 'Male'),
(4, 'James', 'Brown', 'Male'),
(5, 'Mark', 'Sullivan', 'Male'),
(6, 'Mercedes', 'Lackey', 'Female');

--
-- Triggers `employee`
--
DELIMITER $$
CREATE TRIGGER `FOR INSERT` AFTER INSERT ON `employee` FOR EACH ROW INSERT INTO `emp_audit`
VALUES( 'The new ID=', NEW.id, NEW.employee_fname, NEW.employee_lname, NEW.employee_gender, 'was inserted on', NOW())
$$
DELIMITER ;


ALTER TABLE `employee`
  ADD PRIMARY KEY (`id`);
COMMIT;

根据请求添加

CREATE TABLE `emp_audit` (
  `id` int(2) NOT NULL,
  `auditdata` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


ALTER TABLE `emp_audit`
  ADD PRIMARY KEY (`id`);
COMMIT;

错误

INSERT INTO `employee` (`id`, `employee_fname`, `employee_lname`, `employee_gender`) VALUES ('7', 'Jack', 'McQ', 'Male')
MySQL said: Documentation

#1136 - Column count doesn't match value count at row 1

【问题讨论】:

  • 您没有显示emp_audit 架构。我想知道问题是否存在......
  • 添加,emp_audit

标签: sql phpmyadmin


【解决方案1】:

我认为您的触发器应该如最后所述。

但是,请注意,AFIK,在 MySQL FOR EACH ROW 中用词不当,因为它确实“针对所有受影响的行”,要求在触发器主体中进行循环。

DELIMITER $$
CREATE TRIGGER `FOR INSERT` AFTER INSERT ON `employee` FOR EACH ROW
    INSERT INTO `emp_audit`(auditdata)
    VALUES(
        concat(
            'The new ID=', NEW.id, NEW.employee_fname, NEW.employee_lname, NEW.employee_gender, 'was inserted on', NOW()
        )
    )
$$
DELIMITER ;

【讨论】:

  • 感谢您提供的附加 concat 和 (auditdata),我认为这是我的问题。说明 emp_audit 没有将值存储在哪里是我的问题 100%。我见过使用 concat,因为它将所有内容都转换为字符串,以防止值中的数据类型错误正确?
  • @NathanBluhm,我不确定数据类型错误...我在sqlfiddle.com/#!9/9eecb/225260 设计了一个试验。据我了解,您必须至少 coalesce 您的可空列。
  • @NathanBluhm,请不要忘记支持我的解决方案 :-)
猜你喜欢
  • 2013-04-24
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多