如何在MySQL中使用变量添加带有默认值的列?

3

I've tried

SET @branch := 'BRANCH_A';

ALTER TABLE item
ADD COLUMN branch VARCHAR(15) NOT NULL DEFAULT @branch FIRST;

这会返回错误:

SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@branch FIRST' at line 2

"最初的回答"已经正常工作。
这是正常工作的。
ALTER TABLE item
ADD COLUMN branch VARCHAR(15) NOT NULL DEFAULT 'BRANCH_A' FIRST;

我错在哪里了?


2
你没有错,除非你使用动态SQL,否则不能将列默认为变量。你想这样做有什么原因吗? - undefined
@P.Salmon 我正在制作代码片段,因为当出现问题时(由于客户商店的不稳定网络连接,这种情况经常发生),我们需要导出、修改和重新上传表格。不仅仅是添加列分支,还会有很多其他操作,所以我认为在顶部使用变量比在中间替换值更整洁。这只是一个临时的快速修复,我们正在开发一个自动化程序来完成这个任务。 - undefined
不确定是因为网络连接不好出了什么问题,但也许您可以通过解释用户案例来更详细地阐述一下?这是一个正在运行的(Web)应用程序,可以存储信息吗? - undefined
如果是一个Web应用程序的情况,您可以使用HTML 5缓存将Web应用程序变成离线应用程序,并使用WebSQL或IndexedDB在网络连接中断时将信息存储在本地。HTML 5具有API来检测互联网恢复在线后,将信息从本地数据库推送到服务器。但当然,更好的选择是如果可能的话改善互联网连接。 - undefined
@RaymondNijland 客户有几个分支在运行本地桌面程序,然后该程序将商品库存上传到在线服务器,以便其他分支可以查看每个分支的商品库存。但是,如果连接不好,当然商品库存就会变得过时。而且当队列变得太多时,我们需要手动将其上传到服务器。 - undefined
旧的程序每次上传一个项目,速度太慢了。我正在努力改成批量上传项目,但是我不知道如何在C#中发送包含对象数组的POST请求。我在这里提了一个问题,但是还没有得到答案。https://stackoverflow.com/questions/56342631 - undefined
1个回答

2

为了在查询中使用变量,您需要使用动态SQL:

SET @branch := 'BRANCH_A';
SET @query := CONCAT('ALTER TABLE item ADD COLUMN branch VARCHAR(15) NOT NULL DEFAULT "', @branch, '" FIRST');
PREPARE dynamic_statement FROM @query;
EXECUTE dynamic_statement;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接