如何修改MySQL列以允许NULL而不指定其数据类型?
我在mysql中有一个表,我想修改一个表以允许列为null 当我在mysql表上进行描述时,我在mysql workbench中看到了以下内容:如何修改MySQL列以允许NULL而不指定其数据类型?,mysql,sql,syntax,mysql-workbench,Mysql,Sql,Syntax,Mysql Workbench,我在mysql中有一个表,我想修改一个表以允许列为null 当我在mysql表上进行描述时,我在mysql workbench中看到了以下内容: Field Type Null Key Default Extra 我想为特定列将Null字段设置为YES。下面是我如何尝试的,它工作正常,但在将默认值设置为NULL时是否需要提供其数据类型 ALTER TABLE abc.xyz CHANGE hello hello int(10) unsig
Field Type Null Key Default Extra
我想为特定列将Null
字段设置为YES
。下面是我如何尝试的,它工作正常,但在将默认值设置为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)。您走错了方向。将默认值更改为NULL不会“允许”列为NULL:您需要做的是删除列上的“notnull”约束 但要通过脚本重新定义列的可空性,必须继续引用该数据类型。您必须输入以下内容
ALTER TABLE MyTable MODIFY COLUMN this_column Int NULL;
如果您正在寻找一个直接的DDL语句,则不确定这是否适用,但在MySQL Workbench中,您可以右键单击一个表名,选择“ALTERTABLE…”,它将调出一个表定义GUI。从这里,您可以选择null/notnull(在所有其他选项中),而无需显式列出列的数据类型。只是一句“为了它的价值”…这可以通过动态语句来实现 用法: 实施:
最好将NULL/notnull视为字段数据类型的一部分(它确实会影响存储)。如果您正在使用Workbench,为什么不使用它的内置功能来更改表呢?不,数据类型需要定义为表定义的一部分;或者它必须从现有的数据集或表继承。您是否希望设置空默认值,但定义的int值可能因表字段而异?(请记住,NULL是默认值,为什么要设置它?)
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 ;