MySQL删除没有名称的外键

Dav*_*idR 3 mysql

我正在尝试创建一个脚本,该脚本将从几个不同的MySQL数据库中删除没有设置名称的外键约束。我创建了以下脚本:

SET @CN := (SELECT CONSTRAINT_NAME
FROM
  information_schema.KEY_COLUMN_USAGE
WHERE
  table_name = 'inventory' and referenced_table_name='product_code' and referenced_column_name='shipping_code');

ALTER TABLE inventory DROP FOREIGN KEY @CN;
Run Code Online (Sandbox Code Playgroud)

正确获得约束名称。但是,它抱怨@CNALTER TABLE命令中的变量。为什么不起作用?

Gor*_*off 5

MySQL在那里期望使用固定名称。因此,只需使用动态SQL:

set @sql = 'ALTER TABLE inventory DROP FOREIGN KEY @CN';
set @sql = replace(@sql, '@CN', @CN);

prepare alterTable from @sql;
execute alterTable;
Run Code Online (Sandbox Code Playgroud)