错误1062(23000):密钥'PRIMARY'的重复条目'DP1'

问题描述 投票:0回答:1

我有一个表distributor_warehouse,该表具有一个自动递增的余弦dpID。我在插入第一行后无法插入行。我曾经看到过类似的查询,但是到处都可以看到该列需要自动增加的答案,这已经在我的系统中完成了。

mysql> desc distributor_warehouse;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| dpID       | varchar(12)   | NO   | PRI |         |       |
| cpID       | varchar(12)   | YES  |     | NULL    |       |
| QTY        | int(6)        | YES  |     | NULL    |       |
| COST_PRICE | decimal(10,2) | YES  |     | NULL    |       |
| SELL_PRICE | decimal(10,2) | YES  |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

mysql> select * from distributor_warehouse;
+------+------+------+------------+------------+
| dpID | cpID | QTY  | COST_PRICE | SELL_PRICE |
+------+------+------+------------+------------+
| DP1  | CP5  |   10 |    3000.00 |    3100.00 |
+------+------+------+------------+------------+
1 row in set (0.00 sec)

mysql> INSERT INTO distributor_warehouse(cpID,QTY,COST_PRICE,SELL_PRICE) VALUES ('CP6',150,999,1500);
ERROR 1062 (23000): Duplicate entry 'DP1' for key 'PRIMARY'

dpID通过使用触发器自动增加。

这是我的桌子。我已经成功插入第1行,然后在插入第2行时就出现了问题。

mysql> desc autoid;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| ID    | int(10) | NO   | PRI | NULL    | auto_increment |
+-------+---------+------+-----+---------+----------------+
1 row in set (0.00 sec)
| tg_distributor_warehouse_id | INSERT | distributor_warehouse | BEGIN
INSERT INTO autoid VALUES(NULL);
SET NEW.dpID = CONCAT('DP',LPAD(LAST_INSERT_ID(),1,''));
END |
mysql database primary-key error-code mysql-error-1062
1个回答
0
投票

当我尝试重现您的设置时,我没有出现重复的输入错误。相反,我得到这个:

字段'dpID'没有默认值

这很有意义,因为dpID列既不是自动增量,也没有为其指定默认值,因此会出现错误。要解决此问题,请在插入此表时指定一个值:

INSERT INTO distributor_warehouse (dpID, cpID, QTY, COST_PRICE, SELL_PRICE)
VALUES ('DP2', 'CP6', 150, 999, 1500);

很多时候,您会发现使主键列自动递增就足够了。在这种情况下,并且在指定默认值的情况下,您可以从插入语句中省略该列,MySQL会为您填充一个值。

© www.soinside.com 2019 - 2024. All rights reserved.