desc abc; +----6ren">
gpt4 book ai didi

mysql - 处理 mysql "ERROR 1062 (23000)"

转载 作者:行者123 更新时间:2023-11-29 00:17:23 25 4
gpt4 key购买 nike

我有一个数据批量表,其中有很多本不应该有的重复条目。为了删除它,我将数据从该表迁移到具有“唯一”约束的新表。

例如:假设原始表是“abc”,新表是“xyz”。

mysql>desc abc;
+-------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| fname | varchar(8) | NO | | NULL | |
| lname | varchar(8) | NO | | NULL | |
+-------+------------+------+-----+---------+----------------+

mysql> select fname,lname from abc;
+-------+-------+
| fname | lname |
+-------+-------+
| A | B |
| A | B |
| A | B |
| C | D |
| C | D |
+-------+-------+
5 rows in set (0.00 sec)

mysql> create table xyz (id INT PRIMARY KEY AUTO_INCREMENT, fname VARCHAR(8) NOT NULL, lname VARCHAR(8) NOT NULL,UNIQUE KEY uqn (fname, lname));

在新表:xyz 中,set (fname, lname) 是唯一的。

我的第一次尝试是简单的sql文件

INSERT INTO xyz (
fname,
lname
)
SELECT
fname,
lname
FROM
abc;

明显的结果是:

第 3 行的错误 1062 (23000):键“uqn”的重复条目“A-B”

我的第二个涉及错误处理程序和过程(从许多博客中读到)

drop procedure if exists handlerproc ;
DELIMITER //
create procedure handlerproc(OUT p_end VARCHAR(10))
begin
declare CONTINUE handler for sqlstate '23000' SET @b = '- With Errors';

INSERT INTO xyz
(
fname,
lname
)
SELECT
fname,
lname
FROM
abc;

set p_end := concat('The End ',@b);
end;
//
DELIMITER ;
call handlerproc(@a);
select (@a);

现在输出不是我所期望的:

(@a)
结束 -

我有多个问题是:

1) 输出是“The End -”,而不是“The End - With Errors”。这意味着处理程序甚至没有启动。这可能是什么原因造成的?
2) "handlerproc"是在遇到第一个错误时退出执行,还是继续检查其他记录以输入新表 "xyz"?
3) 如果第一次遇到错误要退出datapump,我是怎么写函数实现完整的数据迁移的。

谢谢

最佳答案

您输入了重复项,您可以考虑:INSERT IGNORE INTO ....SELECT FROM ...

试试看:

   INSERT IGNORE INTO xyz (
fname,
lname
)
SELECT
fname,
lname
FROM
abc

INSERT INTO ....SELECT FROM ...ON DUPLICATE KEY...

  INSERT INTO xyz (
fname,
lname
)
SELECT
fname,
lname
FROM
abc
ON DUPLICATE KEY UPDATE fname= ...., lname= ....

编辑:您有UNIQUE KEY uqn (fname, lname),因此这两列不能重复。因为它们是独一无二的。

关于mysql - 处理 mysql "ERROR 1062 (23000)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22502545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com