MySQL INSERT INTO跳过列的可空性
假设我们将表定义为:MySQL INSERT INTO跳过列的可空性,mysql,sql,sql-insert,Mysql,Sql,Sql Insert,假设我们将表定义为: CREATE TABLE tab(col VARCHAR(100), col2 INT); 两列都可以为空。 ALTERTABLE选项卡ALTERCOL2列删除默认值已应用于列col2 快速检查: SELECT table_name, column_name, is_nullable FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tab'; +-------------+--------------+------
CREATE TABLE tab(col VARCHAR(100), col2 INT);
两列都可以为空。
ALTERTABLE选项卡ALTERCOL2列删除默认值
已应用于列col2
快速检查:
SELECT table_name, column_name, is_nullable
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'tab';
+-------------+--------------+-------------+
| TABLE_NAME | COLUMN_NAME | IS_NULLABLE |
+-------------+--------------+-------------+
| tab | col | YES |
| tab | col2 | YES |
+-------------+--------------+-------------+
两列仍标记为可空
现在如果我表演
INSERT INTO tab(col) VALUES('bar');
我将得到一个错误:
字段“col2”没有默认值
同样的代码适用于PostgreSQL
这是某种错误还是我遗漏了什么?Doc说:如果列可以将NULL作为值,那么该列将使用显式的默认NULL子句定义。我猜您是从列中获取了该显式默认值。@juergend但如果是这样,那不是意味着存在其他默认值,在这种情况下,我们不应该看到此错误消息吗?看起来像个bug:在我的情况下,我删除了STRICT_TRANS_表并重新启动了MySQL服务,问题就消失了。@RoxanaSh很好的一点: