Mysql插入行而不传递所有列并且列没有默认值

问题描述 投票:0回答:1

我在mysql中有表。我发现有些列在插入时没有通过。 mysql 如何接受插入这些记录而不抛出异常?

在此输入图片描述

当我插入行而不向它们传递值时,这些列会向它们添加零值。

我已经仔细检查过这些列不为空并且没有默认值。我确保全局 sql_mode 变量值是默认值,即 ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_ENGINE_SUBSTITUTION。 mysql版本是8.0.

sql mysql
1个回答
0
投票

在 MySQL 中,如果您尝试在表中插入一行而不为每列指定值,数据库将通过以下方式之一处理它:

  1. 默认值:如果某个列定义了默认值,并且在插入操作期间未提供任何值,MySQL 将为该列使用该值。
  2. 可空列:如果某个列允许 NULL 值,并且在插入操作期间没有提供任何值,MySQL 会将 NULL 插入到该列中。
  3. 隐式转换:如果插入的值可以转换为列的适当数据类型,MySQL 也可以执行隐式数据类型转换。
  4. 严格 SQL 模式:如果 SQL 模式设置为严格,如果您尝试向不允许 NULL 且没有默认值的列插入缺失值的行,MySQL 将抛出错误。

因此,如果您看到插入记录时没有显式提供所有列的值,则可能是由于以下原因之一造成的。您可以检查表架构中的列定义,以查看是否定义了默认值或者列是否允许 NULL 值。另外,您可以检查 SQL 模式是否设置为 strict。

不允许可为空值不声明默认值并不是很常见的做法。定义这些取决于您的应用程序的具体要求以及您正在处理的数据的性质。但我确实建议您在不允许 null 时声明默认值,并且在插入时也不要传递值。

© www.soinside.com 2019 - 2024. All rights reserved.