我有一个连接到SuiteCRM的MySQL数据库5.6.32。我使用的插件允许创建自动增量字段而无需任何编码。
我遇到的挑战是,在有数据的记录已经存在于我们的系统中之后,我创建了这个自动增量字段。我需要使用自动增量值更新所有先前的条目。
当我创建新记录时,自动增量字段工作正常,但我需要所有记录的唯一编号,因为它被用作唯一标识符,系统中的默认ID太长,我们无法使用。 / p>
它在MySQL数据库中创建的自动增量字段的类型如下:
# Name Type Collation Null Default
10 customer_number_c varchar(80) utf8_general_ci Yes NULL
这是我到目前为止试图填充该字段的尝试:
UPDATE `suitecrm`.`accounts_cstm` SET `customer_number_c` = auto_increment
结果是:
ERROR#1054 - “字段列表”中的未知列'AUTO_INCNREMENTAL'
该字段中也包含默认值NULL
。
答案 0 :(得分:1)
MySQL的内置自动增量功能仅适用于整数数据类型的列。你的是varchar(80)。我不知道你为什么这样做,但我认为这是故意的。
您可以使用会话变量来填充客户编号。在分配值时,它会隐式地将会话变量的整数值强制转换为字符串表示形式。
SET @num := 0;
UPDATE suitecrm.accounts_cstm
SET customer_number_c = (@num := @num + 1)
ORDER BY ...;
您必须指定一些ORDER BY子句,以确保按您希望的顺序分配增加的值。
但您仍然无法在customer_number_c列上使用AUTO_INCREMENT
。因此,在将新行插入此表之前,您的应用必须生成新的客户编号值。
答案 1 :(得分:1)
如果添加auto_increment
主键,MySQL将为您追溯填充现有行。我刚用以下测试代码验证了这一点:
mysql> create table mytable (name varchar(32)) engine=innodb;
Query OK, 0 rows affected (0.04 sec)
mysql> insert into mytable (name) values ('miles'), ('trane'), ('monk');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from mytable;
+-------+
| name |
+-------+
| miles |
| trane |
| monk |
+-------+
3 rows in set (0.00 sec)
mysql> alter table mytable add column id int unsigned primary key auto_increment first;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from mytable;
+----+-------+
| id | name |
+----+-------+
| 1 | miles |
| 2 | trane |
| 3 | monk |
+----+-------+
3 rows in set (0.00 sec)