首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MySQL 主鍵約束刪除語法差異:為何 DROP CONSTRAINT 失效而 DROP PRIMARY KEY 成功

     編輯:程式設計綜合問答

現象重現

-- 建表
CREATE TABLE test (id INT, name VARCHAR(20));
-- 加主鍵(隱含約束名 PRIMARY)
ALTER TABLE test ADD CONSTRAINT pk_test PRIMARY KEY (id);
-- 嘗試用約束名刪除(報錯)
ALTER TABLE test DROP CONSTRAINT pk_test; -- Error 1064
-- 正確語法
ALTER TABLE test DROP PRIMARY KEY; -- 成功

根本原因

MySQL 不支援標準 SQL 的 DROP CONSTRAINT constraint_name 語法(MariaDB 10.2+ 已支援)。MySQL 將主鍵視為特殊索引,刪除主鍵專用語法為 DROP PRIMARY KEY。

MySQL 完整約束刪除語法

ALTER TABLE tbl_name
    DROP PRIMARY KEY              -- 刪除主鍵
  | DROP INDEX index_name         -- 刪除普通/唯一索引
  | DROP FOREIGN KEY fk_symbol    -- 刪除外鍵 (需指定外鍵符號名)
  | DROP COLUMN col_name          -- 刪除欄位
-- 沒有 DROP CONSTRAINT constraint_name

查看約束/索引名稱

SHOW CREATE TABLE test;
SHOW INDEX FROM test;
SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_NAME='test';

最佳實踐

  • 建表時顯式命名約束:CONSTRAINT fk_order_user FOREIGN KEY (uid) REFERENCES user(id),外鍵刪除時需用該符號名。
  • 遷移腳本針對目標資料庫方言編寫,MySQL 用 DROP PRIMARY KEY,PostgreSQL/Oracle/SQL Server 支援 DROP CONSTRAINT。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved