2016-08-10 2 views
2

プライマリキーが存在する場合のみ削除できるクエリが必要です。プライマリキーが存在する場合はドロップする

ALTER TABLE tablename DROP PRIMARY KEY; 

これが存在しない場合はエラーを返しますが、別のデータベースでクエリを実行する必要があります。

+0

主キーが最初に存在するかどうかを確認するために 'INFORMATION_SCHEMA'を調べて、存在すれば主キーを削除してみてください。単一のクエリで行うことはできません。 – Raptor

答えて

1

私はこれを使用することをお勧めします:

SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.',TABLE_NAME, 
' DROP PRIMARY KEY; ANALYZE TABLE ', TABLE_SCHEMA, '.',TABLE_NAME, ';') 
FROM information_schema.COLUMNS 
WHERE CONCAT(TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME) IN 
    (SELECT CONCAT(TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME) 
    FROM INFORMATION_SCHEMA.STATISTICS 
    WHERE INDEX_NAME = 'PRIMARY' -- *Required* to get only the primary keys from the statistics table. 
    -- *Optional* 
    AND TABLE_SCHEMA = 'clients_database'); 
  • 実行これはあなたの必要なSQLを生成します。
  • 結果をコピーして、動作可能なクエリとして実行します。
  • ANALYZE TABLEはオプションで、WHERE句もオプションです。
  • 下記のクエリから、必要に応じてANALYZE TABLE ', TABLE_SCHEMA, '.',TABLE_NAME, ';'を削除できます。

私は、標準化技術を研究し利用する際にinformation_schemaを利用します。あなたが必要としたり、テーブルやカラムについて知りたいと思う

Just aboutすべてが

データベース/ TABLE_SCHEMAのいずれか(該当する場合)には、いくつかのシステムテーブルに住ん:

Note: From doc's

内部スキーマは、デフォルトでは非表示です。 「メタデータと内部スキーマの表示」プリファレンスを切り替えて、オブジェクト・ブラウザーに表示します。 "。"で始まるスキーマこの設定によっても制御されます。

注:Here's something similar that has been created.

は、この情報がお役に立てば幸い!

乾杯、

ジェイ

-1

私は簡単なオプションは、このかもしれないと思う:

最初に行く: 'YourDatabase'>テーブル>あなたのテーブル名>キー> 'のような制約をコピーしますPK__TableName__0001'

これを実行します。

Query:alter Table 'TableName' drop constraint PK__TableName__0001

関連する問題