MySQL处理插⼊过程中的主键唯⼀键重复值的解决⽅法
本篇⽂章主要介绍在插⼊数据到表中遇到键重复避免插⼊重复值的处理⽅法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE;接下来就分别看看这三种⽅式的处理办法。
IGNORE
使⽤ignore当插⼊的值遇到主键(PRIMARY KEY)或者唯⼀键(UNIQUE KEY)重复时⾃动忽略重复的记录⾏,不影响后⾯的记录⾏的插⼊,
创建测试表
CREATE TABLE Tignore
(ID INT NOT NULL PRIMARY KEY ,
NAME1 INT
)default charset=utf8;
正常的插⼊如果插⼊的记录中存在键重复会报错,整个语句都会执⾏失败
使⽤IGNORE如果插⼊的记录中存在重复值会忽略重复值的该记录⾏,不影响其它⾏的插⼊。
REPLACE
使⽤replace当插⼊的记录遇到主键或者唯⼀键重复时先删除表中重复的记录⾏再插⼊。
REPLACE INTO Treplace() VALUES(1,1),(1,2),(2,2);
创建测试表
DROP TABLE IF EXISTS Treplace;
CREATE TABLE Treplace
(ID INT NOT NULL PRIMARY KEY ,
NAME1 INT
)default charset=utf8;
从输出的信息可以看到是4⾏受影响,说明它是先插⼊了(1,1)然后⼜删除了(1,1)
ON DUPLICATE KEY UPDATE
当插⼊的记录遇到主键或者唯⼀键重复时,会执⾏后⾯定义的UPDATE操作。
相当于先执⾏Insert 操作,再根据主键或者唯⼀键执⾏update操作。
创建测试表
DROP TABLE IF EXISTS Tupdate;
CREATE TABLE Tupdate
(ID INT NOT NULL PRIMARY KEY ,
NAME1 INT UNIQUE KEY
)default charset=utf8;
INSERT INTO Tupdate() VALUES(1,1),(1,2) ON DUPLICATE KEY UPDATE NAME1=NAME1+1;
INSERT INTO Tupdate() VALUES(1,1),(1,2) ON DUPLICATE KEY UPDATE NAME1=VALUES(NAME1)+1;
第⼀条语句相当于执⾏:
INSERT INTO Tupdate() VALUES(1,1)
UPDATE Tupdate
SET NAME1=NAME1+1
WHERE ID=1;
第⼆条语句相当于执⾏:
INSERT INTO Tupdate() VALUES(1,1)
UPDATE Tupdate
SET NAME1=2+1
WHERE ID=1;
在ON DUPLICATE KEY UPDATE后⾯使⽤VALUES指的就是插⼊的记录的值,⽽不使⽤VALUES指的是表的⾃⾝值。
注意: ON DUPLICATE KEY UPDATE的后⾯执⾏的UPDATE更新的记录是WHERE重复的主键或者
唯⼀键的ID,这点⾮常重要。⽐如下⾯这种情况:
INSERT INTO Tupdate() VALUES(1,1),(2,1) ON DUPLICATE KEY UPDATE NAME1=VALUES(ID)+1;
它是唯⼀键NAME1重复但是主键不重复,执⾏的语句是这样的:
INSERT INTO Tupdate() VALUES(1,1)
UPDATE Tupdate
SET NAME1=2+1
WHERE ID=1;
不要认为会插⼊主键ID=2的记录进去。
总结
mysql删除重复的数据保留一条上⾯的三种处理重复值的⽅法都⽀持标准的INSERT语法,包括VALUES, INSERT INTO ....SET , SELECT。
关于MySQL 处理插⼊过程中的主键唯⼀键重复值的解决⽅法⼩编就给⼤家介绍这么多,希望对⼤家有所帮助!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论