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()。

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

据我所知,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

本文链接:https://www.f2er.com/670878.html

大家都在问