我在mysql中有一个表,我想修改一个表以允许列为null。
当我在我的mysql表上进行描述时,我在mysql工作台中看到了以下内容:
Field Type Null Key Default Extra我想将特定列的Null字段设置为YES。下面是我正在尝试的方法,它工作得很好,但是当我将DEFAULT设置为NULL时,我需要提供它的数据类型吗?
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)。
发布于 2015-08-14 04:17:44
你好像走错了路。将缺省值更改为NULL并不“允许”列为null:您需要做的是删除列上的"NOT NULL“约束。
但是,要通过脚本重新定义列的可空性,您必须继续引用数据类型。您必须输入类似以下内容
ALTER TABLE MyTable MODIFY COLUMN this_column Int NULL;发布于 2015-08-14 04:36:50
如果您正在寻找一个直接的DDL语句,不确定这是否适用,但是在MySQL工作台中,您可以右键单击一个表名,选择"Alter Table...“它将弹出一个表定义GUI。在那里,您可以选择null/not null (在所有其他选项中),而无需显式列出列的数据类型。只是一个“值得的”...
发布于 2019-08-16 19:12:44
这可以借助动态语句来完成。
用法
CALL sp_make_nullable('schema_name', 'table_name', 'column_name', TRUE);实现
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 ;https://stackoverflow.com/questions/31997554
复制相似问题