在MySQL中的ROLLBACK之后复制UNIQUE KEY错误
作者:互联网
我有一张这样的桌子
mysql> describe seudonimos;
+--------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+----------------+
| id_seudonimo | int(11) unsigned | NO | PRI | NULL | auto_increment |
| seudonimo | varchar(45) | NO | UNI | NULL | |
+--------------+------------------+------+-----+---------+----------------+
2 rows in set (0.02 sec)
我们假设它是空的,因此自动增量为0.例如:
SET AUTOCOMMIT=0;
BEGIN TRANSACTION;
INSERT INTO seudonimos (seudonimo) VALUES ('Agatha Christie');
ROLLBACK;
SET AUTOCOMMIT=1;
据我所知,回滚不会影响自动增量.因此,如果我插入一个新值,则自动增量将为2而不是1.但如果我再次尝试插入“Agatha Christie”,则会出现以下问题:
INSERT INTO seudonimos (seudonimo) VALUES ('Agatha Christie');
#1062 - Duplicate entry 'Agatha Christie' for key 'seudonimo'
这不是我的预期.我期待这个:
+--------------+--------------------+
| id_seudonimo | seudonimo |
+--------------+--------------------+
| 2 | Agatha Christie |
+--------------+--------------------+
怎么了?
解决方法:
在你对自己的问题的一个评论中,你说你正在使用MyISAM.
但是,MyISAM不支持交易(见ref. table).因此,无论您是否尝试将其关闭,它都将始终自动提交.
如果要使用事务,则需要使用支持它的引擎,例如InnoDB.
编辑(以下评论和其他信息 – 我必须承认,在@RolandoMySQLDBA指出之前我还没有意识到你也在使用第二个表):
由于第二个表(seudonimos_consulta,使用MyISAM)涉及事务,通过触发器,在该表中的第一个INSERT之后插入的内容不会回滚.因此,#1062 – 关键’seudonimo’的重复条目’Agatha Christie’将引用第二个表seudonimos_consulta.seudonimo,而不是seudonimos.seudonimo.
标签:mysql,unique-key,mysql-5,transaction 来源: https://codeday.me/bug/20190806/1603798.html