问题描述
我不完全确定如何解释正在发生的事情,但基本上我正在尝试使用子查询将值插入到我的表中,它告诉我我收到错误,因为查询中没有涉及的字段根本没有默认值。
INSERT INTO customerPayment (customerOrderId)
SELECT ID FROM customerOrder
WHERE customerOrder.orderStateId = (
SELECT ID
FROM orderState
WHERE orderState.state = "Payment Recieved"
);
然后,当我进入表格本身尝试为 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()
不能被指定为我的测试中的默认值。相反,列数据类型应为 TIMESTAMP
或 DATETIME
,然后只能使用默认值 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