Lettore frettoloso, non andare via da questa risposta, solo perché è lunga. Non troverai un'altra soluzione, prometto :)
La risposta accettata non rilascia la chiave, trova solo il suo nome. Per rilasciare effettivamente la chiave con un nome sconosciuto, è necessario utilizzare istruzioni preparate. La soluzione più generale è questo script che è possibile personalizzare con cinque variabili:
-- YOU MUST SPECIFY THESE VARIABLES TO FULLY IDENTIFY A CONSTRAINT
SET @table_name = '...';
SET @column_name = '...';
SET @referenced_table_name = '...';
SET @referenced_column_name = '...';
-- make sure to limit queries to a single db schema
SET @db_name = '...';
-- find the name of the foreign key and store it in a var
SET @constraint_name = (
SELECT constraint_name
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = @table_name
AND COLUMN_NAME = @column_name
AND CONSTRAINT_SCHEMA = @db_name
AND referenced_table_name = @referenced_table_name
AND referenced_column_name = @referenced_column_name);
-- prepare the drop statement in a string and run it
SET @s = concat('alter table ', @table_name, ' drop foreign key ', @constraint_name);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
La query precedente è applicabile ai non amministratori? Nel complesso molto buono per sapere informazioni! Grazie! –
È un peccato dover passare attraverso questo viaggio di resistenza, solo per ottenere il tuo nome_fk per questo tipo di query. Dovrebbe essere semplice dire: 'ALTER tabella nome_tabella DROP CONSTRAINT ON col_name' (indipendentemente dal nome che porta). Dopotutto, ci può essere solo uno di questi vincoli su una data chiave. Giusto a tutti? –
@IfediOkonkwo, sono completamente d'accordo. È particolarmente problematico se si utilizza qualcosa come Liquibase per gestire le modifiche dello schema nei database di più ambienti e non è garantito che generi lo stesso nome del vincolo FK su ogni database su cui vengono eseguiti. Ciò significa che non puoi fare affidamento su quel nome di vincolo nelle future modifiche. Sebbene tu possa ovviamente iniziare a nominare i vincoli con un nome fisso dall'inizio. –