MySQL中尝试将ALTER TABLE语句存入变量报错求助
问题解决方法
错误原因
你直接把ALTER TABLE这种DDL语句赋值给用户变量的写法不符合MySQL语法——SET @变量 := 后面只能跟字符串、数值这类表达式,DDL语句不属于这个范畴,所以会报alter is not valid at this expression错误。
两种解决方案
方案1:把ALTER语句存为字符串变量后执行
如果确实需要把语句存在变量里再执行,要把DDL语句用单引号包裹成字符串赋值,再通过预处理语句执行:
-- 将ALTER语句以字符串形式存入变量 SET @p := 'ALTER TABLE `table` RENAME COLUMN ID TO p_ID, RENAME COLUMN c_id TO p_c_id;'; -- 准备并执行预处理语句 PREPARE stmt FROM @p; EXECUTE stmt; -- 释放预处理语句资源 DEALLOCATE PREPARE stmt;
注意:如果表名是MySQL关键字(比如你用的table),必须用反引号`包裹,避免语法冲突
方案2:直接执行ALTER语句(无需存变量)
如果不需要把语句存在变量里,直接执行修改操作即可:
ALTER TABLE `table` RENAME COLUMN ID TO p_ID, RENAME COLUMN c_id TO p_c_id;
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

