我在数据库中有一个带有Order表的MySQL表,这个表有一个自动增量ID。直到现在我们有一般数字订单ID同样1,2,3,4,5 ...从现在开始我必须将A20系列附加到我的ID,如A20103,A20104,A20105等等,当时最后一个三位数达到999附加的系列应该更改为A21001,A21002,A21003等,必须在之前添加的订单中添加相同的系列..
我怎样才能完成这项任务?请指导
答案 0 :(得分:3)
更改现有的auto_increment列并不是一个好主意 - 你真的必须这样做吗?相反,为什么不修改您的选择查询以返回适当格式的ID?通过这样做,您可以保持参照完整性,并且您也可以在将来的任何时候自由更改订单ID格式,而无需更新数据库。
SELECT id, CONCAT('A2', LPAD(id, 4, '0')) AS order_id FROM <table>;
示例输出:
+------+----------+
| id | order_id |
+------+----------+
| 1 | A20001 |
| 2 | A20002
...
| 999 | A20999 |
| 1000 | A21000 |
| 1001 | A21001 |
+------+----------+
答案 1 :(得分:1)
类似于:
"AR2" . str_pad((int) $ordernumber, 4, "0", STR_PAD_LEFT);
吉姆
[edit] - 我假设这是出于其他地方所述的显示目的,数据库上的ID字段是整数!!
答案 2 :(得分:1)
您不能拥有不是数字字段的自动增量。您最好保留当前的自动递增列,并添加一个新的,您将根据您的规则手动计算。
您可能希望使用MAX()函数获取最新订单并生成下一个值:记住在事务中执行此操作。
您可以创建一个函数或触发器,为您完全插入。
答案 3 :(得分:0)
您无法直接向数据库添加前缀。但是,在选择它时,您可以预先添加它。
SELECT concat('A', id) as id FROM table
要获得从20000开始的效果,您可以设置自动增量起始值。