时间:2021-07-01 10:21:17 帮助过:24人阅读
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` int(11) DEFAULT NULL,
`c2` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDBAUTO_INCREMENT=7
slave 上 SHOW CREATE TABLE `test_autoinc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` int(11) DEFAULT NULL,
`c2` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDBAUTO_INCREMENT=6
可以看到执行了replace into之后会发现字段增长不一样了,此时master的自增列为7,而slave的自增列为6,与表内最大值相同,若发生主备切换,slave提供服务,此时通过自增列插入主键6的记录,就会发生主键冲突
解决的办法有两个:
1st suggested fix is: use a delete event and a insert event to record this replace. 2nd suggested fix is: update the auto_incrment in update statements.
我看有的解决是这样的,但是不知道在数据库怎么实现的
if
not
exists (
select
phone
from
t
where
phone=
‘1‘
)
insert
into
t(phone, update_time)
values
(
‘1‘
, getdate())
else
update
t
set
update_time = getdate()
where
phone=
‘1‘
MySQL 复制 主键冲突
标签:replace master values 网上