簡體   English   中英

如果存在則刪除主鍵

[英]drop primary key if exists

我需要一個查詢,只有當它存在時才能刪除主鍵。

ALTER TABLE tablename DROP PRIMARY KEY;

如果它不存在,這將返回錯誤,但我的要求是在不同的數據庫中運行查詢。

我建議使用這個:

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所有您需要或想知道的有關您的表和列的信息都位於任一系統表中(如果適用)

數據庫/表_模式:

注意:來自文檔

內部架構,例如“performance_schema”、“information”schema、“sys”和“mysql”,在默認情況下隱藏的。切換“顯示元數據和內部架構”首選項以在對象瀏覽器中列出它們。以“開頭的架構” .”也受此設置控制。

注意: 這里已經創建了類似的東西。

希望這有幫助!

干杯,

在 MariaDB 10.2.16 中,我能夠通過以下方式解決這個問題:

ALTER TABLE tablename DROP INDEX IF EXISTS `PRIMARY`;

這應該適用於任何表,因為 MySQL 中的主鍵始終稱為PRIMARY如 MySQL 文檔中所述:

PRIMARY KEY 的名稱始終是 PRIMARY,因此不能用作任何其他類型的索引的名稱。

我認為簡單的選擇可能是這樣的:

首先轉到:'YourDatabase'>tables>your table name>keys>復制約束,如'PK__TableName__0001'

然后運行這個:

Query:alter Table 'TableName' drop constraint PK__TableName__0001

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM