【问题标题】:Select the column names that can not be null选择不能为空的列名
【发布时间】:2020-10-20 10:12:10
【问题描述】:

我想修改设置了此属性的列的“非空”属性。

是否可以获取列名来执行此操作,然后运行“ALTER TABLE...”以修改为“null”,以便列的值是可选的?

【问题讨论】:

  • 修改成什么?
  • 将它们修改为“null”,因此列的值将是可选的。我修改了我的问题。谢谢@P.Salmon

标签: mysql mariadb


【解决方案1】:

可以从INFORMATION_SCHEMA.COLUMNS获取表格列信息。

select TABLE_NAME, COLUMN_NAME
from information_schema.COLUMNS
where TABLE_SCHEMA='yourdb' and is_nullable='NO'

【讨论】:

    【解决方案2】:

    您可以从 information_schema.columns 中识别所有要更改的列及其属性。所以

    select concat(
    'Alter table ',
    table_name,
    ' modify column ',
    column_name,' ',
    column_type,
    ';'
    )
    from information_schema.`COLUMNS` where table_schema = 'sandbox' and is_nullable = 'no'
    

    会生成一堆alter语句。

    您应该将沙箱更改为您感兴趣的架构。

    注意我还没有彻底测试过,所以要小心

    【讨论】:

      【解决方案3】:

      您无法更改 constraint,但您可以将其删除然后重新创建。

      按照这些步骤,您的问题将得到解决;

      首先,放弃你的约束:

      ALTER TABLE your_table DROP CONSTRAINT ACTIVEPROG_FKEY1;
      

      然后,重新创建它:

      ALTER TABLE your_table
      add CONSTRAINT ACTIVEPROG_FKEY1 FOREIGN KEY(ActiveProgCode) REFERENCES PROGRAM(ActiveProgCode)
          ON DELETE CASCADE;
      

      参考:

      How to Alter Constraint

      【讨论】:

      • 谢谢,但我想先知道要更改的列的名称。
      • @ziiweb 你想改变的列名是什么意思?
      • @ziiweb 重新检查答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2016-07-30
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多