我試過以下內容,但由於某種原因@check
參數設置爲我試圖檢查的約束的值,即使約束不存在。如何檢測是否在mysql存儲過程中添加了外鍵?
任何想法爲什麼?
CREATE PROCEDURE AddForeignKey(
IN constraint_name varchar(64),
IN foreign_key_column_name varchar(64),
IN table_name varchar(64),
IN database_name varchar(64),
IN foreign_table_key_name varchar(64),
IN foreign_table_name varchar(64))
BEGIN
set @sql = CONCAT('ALTER TABLE ', database_name, '.', table_name,
' ADD CONSTRAINT ', constraint_name,
' FOREIGN KEY (', foreign_key_column_name, ')'
' REFERENCES ', foreign_table_name, ' (', foreign_table_key_name, ');') ;
set @dbname = database_name;
set @fkname = constraint_name;
set @check = '';
SELECT
CONSTRAINT_NAME
INTO
@check
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
CONSTRAINT_SCHEMA = @dbname
AND
CONSTRAINT_NAME = @fkname
AND
CONSTRAINT_TYPE = 'FOREIGN KEY'
LIMIT 1;
IF @check != @fkname
THEN
prepare stmt from @sql;
execute stmt;
ELSE
insert into errors(message) values (CONCAT ('Check: ', @check, ' DB:', @dbname, ' FK:', @fkname, ' Could not execute statement: ', @sql));
END IF;
END
我無法重現該問題。請參閱[db-fiddle](https://www.db-fiddle.com/f/huwJ99DrjLbaLPqKCvcBhB/0)。 – wchiquito
我沒有使用MySQL作爲root用戶。我也使用MySQL 5.6。 – rstackhouse