2014-02-18 130 views
1

我有一個column1設置爲主鍵的表。因此我認爲它有其獨特的約束和指標。現在我想介紹column2作爲新的主鍵,但我想保留column1作爲唯一約束和索引的輔助鍵。 的問題是:如果我將執行MySQL:刪除主鍵會刪除唯一的約束和/或索引嗎?

alter table my_table drop primary key; 

將其移出COLUMN1唯一約束和/或索引在MySQL(InnoDB的)?

+1

你嘗試了嗎? –

+0

是的,它刪除了唯一的約束和索引。 – Sadikhasan

回答

1

是的,它會放棄現有的主鍵。你可以嘗試像下面這樣

DROP TABLE IF EXISTS test_index; 
Query OK, 0 rows affected (0.04 sec) 

CREATE TABLE test_index(ID INT , PRIMARY KEY(ID)); 
Query OK, 0 rows affected (0.25 sec) 

ALTER TABLE test_index ADD COLUMN email CHAR(50) NOT NULL; 
Query OK, 0 rows affected (0.33 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

ALTER TABLE test_index DROP PRIMARY KEY , ADD UNIQUE KEY (ID) , ADD PRIMARY KEY(email); 
Query OK, 0 rows affected (0.48 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

show create table test_index\G 
*************************** 1. row *************************** 
      Table: test_index 
    Create Table: CREATE TABLE `test_index` (
     `ID` int(11) NOT NULL DEFAULT '0', 
     `email` char(50) NOT NULL, 
     PRIMARY KEY (`email`), 
     UNIQUE KEY `ID` (`ID`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 
    1 row in set (0.00 sec) 
1

是的,它會刪除唯一約束和索引。

CREATE TABLE IF NOT EXISTS my_table(
    col1 INT PRIMARY KEY, 
    col2 INT); 

SHOW INDEX FROM my_table; 

| TABLE | NON_UNIQUE | KEY_NAME | SEQ_IN_INDEX | COLUMN_NAME | COLLATION | CARDINALITY | SUB_PART | PACKED | NULL | INDEX_TYPE | COMMENT | INDEX_COMMENT | 
|----------|------------|----------|--------------|-------------|-----------|-------------|----------|--------|------|------------|---------|---------------| 
| my_table |   0 | PRIMARY |   1 |  col1 |   A |   0 | (null) | (null) |  |  BTREE |   |    | 

而且當你改變表格。

alter table my_table drop primary key; 
SHOW INDEX FROM my_table; 

Record Count: 0; Execution Time: 1ms 

當你放棄了主鍵這些語句將被允許..

INSERT INTO my_table VALUES (1,1); 
INSERT INTO my_table VALUES (1,1); 

這裏有一個SQL Fiddle