プレフィックスを持つデータベース内のすべての列を削除するコマンドを phpMyAdmin で実行する方法を教えてtest_
ください。
4 に答える
テーブルから列を削除するには、次の構文を使用します。
alter table <tablename> drop column <columnname>
test_ で始まるデータベース内のテーブル内のすべての列を検索するには、次の手順を実行します。
select column_name
from INFORMATION_SCHEMA.columns
where table_name = <table_name> and
table_schema = <schema_name> and
left(column_name, 5) = 'test_' -- not using "like" because '_' is a wildcard char
これを手動で行っていた場合は、次のクエリを実行し、結果を mysql クエリ インターフェイスに貼り付けることをお勧めします。
select concat('alter table ', table_name, ' drop column ', column_name)
from INFORMATION_SCHEMA.columns
where table_name = <table_name> and
schema_name = <schema_name> and
left(column_name, 5) = 'test_'
クエリを実行し、結果を返し、各行をクエリとして実行することにより、コードで同様のことを行うことができます。
実際にスキーマから列を削除したい場合は、必要な SQL コマンドを MySQL の情報スキーマ テーブルから動的に生成する必要があります。SQLプリペアドステートメントを使用してMySQLストアドプロシージャ内でそれを行うことは可能ですが、以下に示しますが、好みの開発言語で実装/理解する方が簡単であることに気付くかもしれません(質問では言及しません):
DELIMITER ;;
CREATE PROCEDURE dropMatchingColumns(IN pattern VARCHAR(64))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR
SELECT CONCAT(
'ALTER TABLE `', REPLACE( TABLE_NAME, '`', '``'), '` ',
GROUP_CONCAT(
'DROP COLUMN `', REPLACE(COLUMN_NAME, '`', '``'), '`'
)
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE pattern AND TABLE_SCHEMA = DATABASE()
GROUP BY TABLE_NAME
;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO @sql;
IF done THEN
LEAVE read_loop;
END IF;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
END;;
DELIMITER ;
このプロシージャを定義すると、CALL dropMatchingColumns('test\_%');
接頭辞が付いたすべての列をtest_
現在のデータベースから削除するだけで済みます。
MySQl Workbench を使用している場合は、一括選択を実行し、選択した列の一括削除をワークベンチに指示するだけで、複数の列を削除できます。
私のように問題を抱えている人のために、この答えを説明または単純化したいと思います。
データベース「demo」のすべてのテーブルで「seq」という名前の列を削除するのに問題がありました。
次のようなものを使用して、各テーブル用にフォーマットされたコマンドで選択を作成できます。
Select concat('alter table ', table_name, ' drop column ', 'seq;')
from (select table_name
from INFORMATION_SCHEMA.tables
where table_name = table_name and
table_schema = 'demo') as t
これにより、'demo' データベース内の各テーブルに対して、alter table コマンドが作成されます。
結果を選択してコピーし、クエリ エディターに貼り付ける必要があります。
これは 2 段階のプロセスですが、これを数回行う必要がある場合は、コマンドをテキスト ファイルに保存して、後で再度実行します。