2014-01-08 60 views
4

我有以下MySQL命令来删除外键约束:MYSQL:ALTER TABLE DROP FOREIGN KEY基于SELECT结果

ALTER TABLE network_profile DROP FOREIGN KEY 'FK98875604AC3BAD33'; 

但我宁愿使用SELECT语句来首次发现外键constraint_id并在ALTER TABLE命令中使用它,但不成功。这可能吗?

尝试:

ALTER TABLE network_profile DROP FOREIGN KEY (SELECT constraint_name FROM information_schema.key_column_usage WHERE column_name = 'mt_check_list' AND table_schema = 'mydb'); 

也试过:

SELECT @constraint_name := constraint_name FROM information_schema.key_column_usage WHERE column_name = 'mt_check_list' AND table_schema = 'mydb'; 
ALTER TABLE network_profile DROP FOREIGN KEY @constraint_name; 

请帮助?

回答

5

在ALTER语句中不可能使用变量。但是,您可以创建一个字符串,从字符串中准备一个语句,然后执行语句:

SELECT CONCAT(
    'ALTER TABLE `network_profile` DROP FOREIGN KEY `', 
    constraint_name, 
    '`' 
) INTO @sqlst 
FROM information_schema.key_column_usage 
WHERE table_name = 'network_profile' 
    AND column_name = 'mt_check_list'; 

PREPARE stmt FROM @sqlst; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
SET @sqlst = NULL;