MySQL中Unique约束列被设为主键,无法修改主键的问题求助
问题解决:将主键从
nome转移到idcurso并保留nome的唯一约束 问题原因
InnoDB引擎要求每张表必须有主键,当你没有显式定义主键时,MySQL会自动将第一个非空且唯一(NOT NULL UNIQUE)的列设为主键。这就是你只给nome加了NOT NULL和UNIQUE约束,它却被识别为主键的核心原因。
解决步骤
1. 先修正idcurso列的属性(主键列不能为NULL)
如果希望idcurso作为自增主键(推荐做法),执行:
ALTER TABLE cursos MODIFY idcurso INT NOT NULL AUTO_INCREMENT;
若不需要自增,仅改为非空即可:
ALTER TABLE cursos MODIFY idcurso INT NOT NULL;
2. 删除原主键约束
直接执行主键删除语句:
ALTER TABLE cursos DROP PRIMARY KEY;
如果遇到1091错误,说明主键约束与唯一索引绑定,可尝试删除nome的唯一索引(主键会被一并移除):
ALTER TABLE cursos DROP INDEX nome;
3. 给idcurso添加主键约束
注意必须加括号,这是你之前语法报错的原因:
ALTER TABLE cursos ADD PRIMARY KEY (idcurso);
4. 重新给nome添加唯一约束(若删除主键时被一并清除)
执行:
ALTER TABLE cursos ADD UNIQUE (nome);
避免后续问题的建议
以后创建表时,显式定义主键,就不会出现MySQL自动将其他列设为主键的情况,示例语句:
CREATE TABLE IF NOT EXISTS cursos ( idcurso INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(30) NOT NULL UNIQUE, descricao TEXT, carga INT UNSIGNED, totalaulas INT UNSIGNED, ano YEAR DEFAULT '2016' ) DEFAULT CHARSET utf8mb4;
内容的提问来源于stack exchange,提问作者Carlos Eduardo Barros
相关产品推荐
相关产品推荐

