首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改MySQL列以允许在不指定其数据类型的情况下为NULL?

如何修改MySQL列以允许在不指定其数据类型的情况下为NULL?
EN

Stack Overflow用户
提问于 2015-08-14 04:12:21
回答 3查看 12.9K关注 0票数 3

我在mysql中有一个表,我想修改一个表以允许列为null。

当我在我的mysql表上进行描述时,我在mysql工作台中看到了以下内容:

代码语言:javascript
复制
Field       Type        Null        Key     Default     Extra

我想将特定列的Null字段设置为YES。下面是我正在尝试的方法,它工作得很好,但是当我将DEFAULT设置为NULL时,我需要提供它的数据类型吗?

代码语言:javascript
复制
ALTER TABLE abc.xyz CHANGE hello hello int(10) unsigned DEFAULT NULL;
ALTER TABLE abc.xyz CHANGE world world int(10) unsigned DEFAULT NULL;

有没有其他方法可以让我只选择列名,并将默认设置为NULL,而不是使用它的数据类型?我不想在将其缺省值设置为NULL时提供int(10)

EN

回答 3

Stack Overflow用户

发布于 2015-08-14 04:17:44

你好像走错了路。将缺省值更改为NULL并不“允许”列为null:您需要做的是删除列上的"NOT NULL“约束。

但是,要通过脚本重新定义列的可空性,您必须继续引用数据类型。您必须输入类似以下内容

代码语言:javascript
复制
 ALTER TABLE MyTable MODIFY COLUMN this_column Int NULL;
票数 6
EN

Stack Overflow用户

发布于 2015-08-14 04:36:50

如果您正在寻找一个直接的DDL语句,不确定这是否适用,但是在MySQL工作台中,您可以右键单击一个表名,选择"Alter Table...“它将弹出一个表定义GUI。在那里,您可以选择null/not null (在所有其他选项中),而无需显式列出列的数据类型。只是一个“值得的”...

票数 2
EN

Stack Overflow用户

发布于 2019-08-16 19:12:44

这可以借助动态语句来完成。

用法

代码语言:javascript
复制
CALL sp_make_nullable('schema_name', 'table_name', 'column_name', TRUE);

实现

代码语言:javascript
复制
DELIMITER $$
create procedure eval(IN var_dynamic_statement text)
BEGIN
    SET @dynamic_statement := var_dynamic_statement;
    PREPARE prepared_statement FROM @dynamic_statement;
    EXECUTE prepared_statement;
    DEALLOCATE PREPARE prepared_statement;
END;

DELIMITER ;

DELIMITER $$
create procedure sp_make_nullable(IN var_schemaname varchar(64), IN var_tablename varchar(64),
                                  IN var_columnname VARCHAR(64), IN var_nullable BOOLEAN)
BEGIN
    DECLARE var_column_type LONGTEXT DEFAULT (SELECT COLUMN_TYPE
                                              FROM information_schema.COLUMNS
                                              WHERE TABLE_SCHEMA = var_schemaname
                                                AND TABLE_NAME = var_tablename
                                                AND COLUMN_NAME = var_columnname);

    DECLARE var_nullable_prefix VARCHAR(64) DEFAULT '';

    IF NOT var_nullable THEN
        SET var_nullable_prefix := 'NOT';
    end if;

    CALL eval(CONCAT('
        ALTER TABLE ', var_schemaname, '.', var_tablename,
        ' MODIFY ', var_columnname, ' ', var_nullable_prefix, ' NULL
    '));
end$$

DELIMITER ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31997554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档