[英]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');
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.