【问题标题】:MySQL: Does dropping primary key removes unique constraint and/or index?MySQL:删除主键会删除唯一约束和/或索引吗?
【发布时间】:2014-02-18 05:38:08
【问题描述】:

我有一个将 column1 设置为主键的表。我相信它因此具有独特的约束和索引。现在我想引入 column2 作为新的主键,但我想将 column1 保留为具有唯一约束和索引的辅助键。 问题是:我是否会执行

alter table my_table drop primary key;

它会从 MySQL (InnoDB) 中的 column1 中删除唯一约束和/或索引吗?

【问题讨论】:

  • 是的,它删除了唯一约束和索引。

标签: mysql sql primary-key innodb


【解决方案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)

【讨论】:

    【解决方案2】:

    Apperent,是的,它将删除唯一约束和索引。

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多