在数据库中添加新行后,我使用此查询按日期重写id number列。即使查询运行良好,我也无法修复查询末尾显示的错误。有什么建议吗?
SET @ROW = 0;
UPDATE `mytable` SET `id` = @ROW := @ROW+1 ORDER BY `date` ASC;
Warning: #1287 Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'.
我尝试修改查询
set id = "0";
UPDATE `mytable` SET := id+1 ORDER BY `data` ASC;
但没有成功。
1条答案
按热度按时间l7wslrjt1#
用户变量大多被MySQL 8.0中的窗口函数所取代。
您可以使用
row_number()
和update
/join
语法来满足您的要求:Demo on DB Fiddlde。
这里假设
id
是一个唯一的开始键。我仍然会质疑为什么需要更改看起来像代理主键的内容。您可以在查询中动态计算行号,或者使用视图:
Demo on DB Fiddlde