【发布时间】:2020-10-20 10:12:10
【问题描述】:
我想修改设置了此属性的列的“非空”属性。
是否可以获取列名来执行此操作,然后运行“ALTER TABLE...”以修改为“null”,以便列的值是可选的?
【问题讨论】:
-
修改成什么?
-
将它们修改为“null”,因此列的值将是可选的。我修改了我的问题。谢谢@P.Salmon
我想修改设置了此属性的列的“非空”属性。
是否可以获取列名来执行此操作,然后运行“ALTER TABLE...”以修改为“null”,以便列的值是可选的?
【问题讨论】:
可以从INFORMATION_SCHEMA.COLUMNS获取表格列信息。
select TABLE_NAME, COLUMN_NAME
from information_schema.COLUMNS
where TABLE_SCHEMA='yourdb' and is_nullable='NO'
【讨论】:
您可以从 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语句。
您应该将沙箱更改为您感兴趣的架构。
注意我还没有彻底测试过,所以要小心
【讨论】:
您无法更改 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;
参考:
【讨论】: