SQL:将所有没有默认值的列的默认值设置为 NULL

Posted

技术标签:

【中文标题】SQL:将所有没有默认值的列的默认值设置为 NULL【英文标题】:SQL: Set default value to NULL for all columns without default value 【发布时间】:2019-08-17 21:27:45 【问题描述】:

我使用的虚拟主机已为数据库启用了 StrictMode。我所有的 php 脚本现在都停止工作了,因为它们报告我没有为某些列定义默认值。

由于我在很多表中有很多列,有没有办法将所有列设置为“默认值 = 无”和“默认值 = NULL”? 这样就不会再报错了。

当然,如果有其他(更好的)方法,我可以。

我尝试在网上寻找,但找不到适合这种情况的任何东西。

【问题讨论】:

none 不是我知道的 mysql 中的任何特殊值。您能否添加示例数据来解释您在此处尝试执行的操作? 【参考方案1】:

这里应该适用于导致错误的每个列的一般方法是设置默认值,然后可能进行更新以回填缺少值的记录。

ALTER TABLE yourTable ALTER some_text_column SET DEFAULT 'None';

这是更新:

UPDATE yourTable SET some_text_column = 'None' WHERE some_text_column IS NULL;

您不需要进行此更新,但将旧记录缺失值与新记录的外观保持一致可能是有意义的。

【讨论】:

我想一次性更新所有没有默认值(默认值 = 'None')的列,而不是对每个表的每一列进行一次查询。我需要一个更快的方法。 如果不使用一些动态 SQL,您将无法做到这一点。 您的第二个查询是将列值设置为 null 而不是将其默认值设置为 null【参考方案2】:

你可以改变列

ALTER TABLE table_name
 MODIFY COLUMN col datatype  DEFAULT null

【讨论】:

其实列可以为NULL,我只要把默认值设置为NULL

以上是关于SQL:将所有没有默认值的列的默认值设置为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

将行恢复为默认列值mysql

SQL Server Management Studio 2017 中 DATETIME 列的默认值

在 postgresql 中使用休眠注释设置列的默认值

具有唯一值的列的 SQL 总和量

Big Query Tables 中列的默认值

将具有默认值的列添加到 SQL Server 中的现有表