MYSQL[04]更換主鍵遇到的一個問題

來源:互聯網
上載者:User

關於主鍵的SQL文法:
alter table t_google_mem drop primary key; //刪除表現有主鍵
alter table t_google_mem add primary key (f_id); //建立主鍵
alter table t_google_mem add primary key (f_id, f_csname); //建立多值主鍵

下面說下我在實際的工作過程中,遇到的一個問題。目前我有了如下的一張表,現在要做的操作是將f_id和f_csname聯合作為多值主鍵。

mysql> desc t_google_mem;+--------------+-----------+------+-----+---------------------+----------------+| Field | Type | Null | Key | Default | Extra |+--------------+-----------+------+-----+---------------------+----------------+| f_id | int(10) | NO | PRI | NULL | auto_increment || f_name | char(255) | NO | | | || f_assion | char(255) | NO | | | || f_csname | char(255) | NO | | | || f_time | datetime | NO | | 0000-00-00 00:00:00 | || f_status | int(10) | NO | | 1 | |+--------------+-----------+------+-----+---------------------+----------------+

錯誤的做法:

按照以前的習慣,我的打算是先刪除掉表的主鍵,然後再添加多值主鍵。但在使用alter table t_google_mem drop primary key;語句時,出錯了提示如下:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

錯誤的大概意思是:不正確的表格定義;這裡只能有一個欄位當作auto increment,並且必須把這個欄位作為主鍵。

思考上面的錯誤提示後,我覺得正確的步驟應該首先去掉表中欄位f_id的auto_increment的屬性,然後再刪除主鍵,下一步再添加多值主鍵,最後再將f_id調整成auto_increment。

說做就做,下面開始實施SQL修改。

第一步:alter table t_google_mem modify f_id int(10) not null default 0;

mysql> alter table t_google_mem modify f_id int(10) not null default 0;Query OK, 41 rows affected (0.05 sec)Records: 41 Duplicates: 0 Warnings: 0

第二步:alter table t_google_mem drop primary key;

mysql> alter table t_google_mem drop primary key;Query OK, 41 rows affected (0.04 sec)Records: 41 Duplicates: 0 Warnings: 0

第三步:alter table t_google_mem add primary key (f_id, f_csname);

mysql> alter table t_google_mem add primary key (f_id, f_csname);Query OK, 41 rows affected (0.03 sec)Records: 41 Duplicates: 0 Warnings: 0

第四步:alter table t_google_mem modify f_id int(10) not null auto_increment;

mysql> alter table t_google_mem modify f_id int(10) not null auto_increment;Query OK, 41 rows affected (0.02 sec)Records: 41 Duplicates: 0 Warnings: 0

經過上述4步的修改後,檢查表結構,結果顯示已經滿足我的要求。

mysql> desc t_google_mem;+--------------+-----------+------+-----+---------------------+----------------+| Field | Type | Null | Key | Default | Extra |+--------------+-----------+------+-----+---------------------+----------------+| f_id | int(10) | NO | PRI | NULL | auto_increment || f_name | char(255) | NO | | | || f_assion | char(255) | NO | | | || f_csname | char(255) | NO | PRI | | || f_time | datetime | NO | | 0000-00-00 00:00:00 | || f_status | int(10) | NO | | 1 | |+--------------+-----------+------+-----+---------------------+----------------+
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.