如何在MariaDB中定义变量用作表结构的字段默认值
解决方案
你当前的写法无法生效有两个核心原因:
- 变量被单引号包裹后会被识别为普通字符串,不会解析为变量值
- ALTER TABLE 的 DEFAULT 子句默认不支持直接使用用户自定义变量,必须通过动态SQL的方式传入变量的实际值
具体实现
使用MySQL的预处理语句动态拼接SQL即可实现仅修改变量定义就全局生效的需求,示例代码如下:
首先是集中配置段,所有默认值都在这里定义,修改一次即可全局生效:
SET @money_rename_def := 20*10000; SET @money_gender_def := 40*10000;
然后是动态执行ALTER的逻辑,无需重复修改:
-- 拼接ALTER语句 SET @alter_sql = CONCAT( 'ALTER TABLE `money` ', 'CHANGE COLUMN `money_rename` `money_rename` INT(10) UNSIGNED NOT NULL DEFAULT ', @money_rename_def, ', ', 'CHANGE COLUMN `money_gender` `money_gender` INT(10) UNSIGNED NOT NULL DEFAULT ', @money_gender_def, ';' ); -- 执行动态SQL PREPARE alter_stmt FROM @alter_sql; EXECUTE alter_stmt; DEALLOCATE PREPARE alter_stmt;
扩展说明
- 如果需要修改多个表,只需要继续复用前面定义的变量,拼接新的ALTER语句执行即可
- 如果字段是字符串/日期类型,拼接时需要给变量值加上引号,示例:
CONCAT('DEFAULT \'', @str_default, '\'') - 执行前可以先运行
SELECT @alter_sql;打印拼接后的语句,校验逻辑是否符合预期
内容的提问来源于stack exchange,提问作者Byakugan
相关产品推荐
相关产品推荐

