Mysql sql:将主键更改为另一个唯一元素列表
我想将表的ID更改为其他唯一值。 这是一个简化的示例:Mysql sql:将主键更改为另一个唯一元素列表,mysql,sql,Mysql,Sql,我想将表的ID更改为其他唯一值。 这是一个简化的示例: CREATE TABLE IF NOT EXISTS test ( id int(11) NOT NULL, reverse_id int(11) NOT NULL, PRIMARY KEY (id), UNIQUE KEY reverse_id (reverse_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO test (id, reverse_id) VAL
CREATE TABLE IF NOT EXISTS test (
id int(11) NOT NULL,
reverse_id int(11) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY reverse_id (reverse_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO test (id, reverse_id) VALUES ('1', '2'), ('2', '1');
UPDATE test SET id = reverse_id;
# Duplicate entry '2' for key 'PRIMARY'
我正在寻找一个只在更新结束时检查id元素唯一性的命令
[我知道我可以创建第二行并将该行的状态更改为主,然后我可以更新id并重置主状态,但我希望有一个命令,而无需添加或更改其他行、表]如果创建的表的主键为
reverse\u id
这在您的定义中是唯一的,因此它是主键的有效候选项
根据定义,主键是唯一的-这个约束阻止您实现您想要的据我所知,这在MySQL中是不可能的 它既不在语句级对约束求值(在处理时在行级对约束求值),也不允许您定义要延迟的约束(因此将在提交时对约束求值)
如果要“重新编号”主键,我可以看到的唯一选项是:删除主键,重新编号ID,然后重新创建主键 您可以删除主键,但MySQL只会创建一个隐藏的整数主键,从而违反您的要求。