Eu tenho o seguinte esquema de tabela que mapeia user_customers para permissões em um banco de dados MySQL ativo:
mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_customer_id | int(11) | NO | PRI | NULL | |
| permission_id | int(11) | NO | PRI | NULL | |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
Gostaria de remover as chaves primárias de user_customer_id e permission_id e reter a chave primária para o ID.
Quando executo o comando:
alter table user_customer_permission drop primary key;
Estou tendo o erro a seguir:
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
Como posso soltar a chave primária de uma coluna?
@markb
: se você restaurar a chave primária, com certeza poderá revertê-la paraAUTO_INCREMENT
.AUTO_INCREMENT
mecanismo com uma tabela InnoDB, umaAUTO_INCREMENT
colunaai_col
deve ser definida como parte de um índice para que seja possível executar o equivalente a umaSELECT MAX(ai_col)
pesquisa indexada na tabela para obter o valor máximo da coluna. Normalmente, isso é alcançado tornando a coluna a primeira coluna de algum índice de tabela.Uma linha:
Você também não perderá o incremento automático e precisará adicioná-lo novamente, o que pode ter efeitos colaterais.
fonte
Creio que Quassnoi respondeu à sua pergunta direta. Apenas uma observação: talvez seja apenas uma redação estranha da sua parte, mas você parece ter a impressão de ter três chaves primárias, uma em cada campo. Este não é o caso. Por definição, você pode ter apenas uma chave primária. O que você tem aqui é uma chave primária que é composta de três campos. Portanto, você não pode "soltar a chave primária em uma coluna". Você pode soltar a chave primária ou não a soltar. Se você desejar uma chave primária que inclua apenas uma coluna, poderá soltar a chave primária existente em 3 colunas e criar uma nova chave primária em 1 coluna.
fonte
fonte
Caso você tenha uma chave primária composta, faça o seguinte:
ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);
fonte
"se você restaurar a chave primária, com certeza poderá revertê-la para AUTO_INCREMENT"
Não deve haver dúvida se é desejável "restaurar a propriedade PK" e "restaurar a propriedade de incremento automático" da coluna ID.
Dado que foi um incremento automático na definição anterior da tabela, é bem provável que exista algum programa que seja inserido nessa tabela sem fornecer um valor de ID (porque a coluna ID é de incremento automático).
Qualquer operação desse programa será interrompida por não restaurar a propriedade de incremento automático.
fonte
Primeiro modifique a coluna para remover o campo auto_increment como este: alter table user_customer_permission modify id da coluna int;
Em seguida, solte a chave primária. alterar tabela user_customer_permission soltar chave primária;
fonte
fonte
Eu tive o mesmo problema e ao lado de alguns valores dentro da minha tabela. Embora eu tenha alterado minha Chave Primária com
ALTER TABLE
DROP PRIMARY KEY , ADD PRIMARY KEY (
ID user_customer_permission)
problema continuou no meu servidor. Criei um novo campo dentro da tabela, transferi os valores para um novo campo e apaguei o antigo, problema resolvido !!
fonte
Para adicionar chave primária na coluna.
Para remover a chave primária da tabela.
fonte
Primeiro faça backup do banco de dados. Solte qualquer chave estrangeira associada à tabela. truncar a tabela de chaves estrangeiras.Truncar a tabela atual. Remova as chaves primárias necessárias. Use sqlyog ou workbench ou heidisql ou dbeaver ou phpmyadmin.
fonte
Localize a tabela no gerenciador SQL, clique com o botão direito do mouse e selecione design, clique com o botão direito do mouse no pequeno ícone de chave e selecione remover chave primária.
fonte