1
我有一個column1設置爲主鍵的表。因此我認爲它有其獨特的約束和指標。現在我想介紹column2作爲新的主鍵,但我想保留column1作爲唯一約束和索引的輔助鍵。 的問題是:如果我將執行MySQL:刪除主鍵會刪除唯一的約束和/或索引嗎?
alter table my_table drop primary key;
將其移出COLUMN1唯一約束和/或索引在MySQL(InnoDB的)?
我有一個column1設置爲主鍵的表。因此我認爲它有其獨特的約束和指標。現在我想介紹column2作爲新的主鍵,但我想保留column1作爲唯一約束和索引的輔助鍵。 的問題是:如果我將執行MySQL:刪除主鍵會刪除唯一的約束和/或索引嗎?
alter table my_table drop primary key;
將其移出COLUMN1唯一約束和/或索引在MySQL(InnoDB的)?
是的,它會放棄現有的主鍵。你可以嘗試像下面這樣
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)
是的,它會刪除唯一約束和索引。
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
你嘗試了嗎? –
是的,它刪除了唯一的約束和索引。 – Sadikhasan