INSERT INTO 使用子查询告诉我一个不涉及的字段是错误吗?

问题描述

我不完全确定如何解释正在发生的事情,但基本上我正在尝试使用子查询将值插入到我的表中,它告诉我我收到错误,因为查询中没有涉及的字段根本没有认值。

INSERT INTO customerPayment (customerOrderId) 
SELECT ID FROM customerOrder 
WHERE customerOrder.orderStateId = (
    SELECT ID 
    FROM orderState 
    WHERE orderState.state = "Payment Recieved"
);

错误 1364 (HY000):字段“总计”没有认值

然后,当我进入表格本身尝试为 total 设置认值时,它告诉我另一个不相关字段的认值无效。

ALTER TABLE customerPayment ALTER total SET DEFAULT 0.0;

ERROR 1067 (42000): 'paymentDate' 的认值无效

需要注意的是,“paymentDate”当前的认值是 curdate()。

解决方法

据我所知,total 列是使用 NOT NULL 条件创建的,但未分配任何默认值。像这样的例子:

 total DECIMAL(4,4) NOT NULL,

而且似乎 CURDATE()CURRENT_DATE() 不能被指定为我的测试中的默认值。相反,列数据类型应为 TIMESTAMPDATETIME,然后只能使用默认值 CURRENT_TIMESTAMP()NOW() 进行分配。因此,也许第一步是更改 paymentDate 数据类型和默认值,例如:

ALTER TABLE customerPayment MODIFY COLUMN `paymentDate` TIMESTAMP NOT NULL DEFAULT NOW();

然后您可以继续修改 total 列,例如:

ALTER TABLE customerPayment MODIFY COLUMN total DECIMAL(4,4) NOT NULL DEFAULT 0.0;

然后你可能可以在这之后做你的INSERT

这是一个小提琴:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=4af3d11f90916469d8fbe61011b3fcab