![](/img/trans.png)
[英]Use UNIQUE in AUTO_INCREMENT column to create an improved PRIMARY KEY
[英]Migrating Primary Key to use AUTO_Increment
我有一個主鍵為sale_id,payment_type的表
mysql> describe phppos_sales_payments;
+----------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| sale_id | int(10) | NO | PRI | NULL | |
| payment_type | varchar(255) | NO | PRI | NULL | |
| payment_amount | decimal(15,2) | NO | | NULL | |
+----------------+---------------+------+-----+---------+-------+
我想添加一個新的字段id
,它是一個自動增量。 原因是我想分別跟蹤相同類型的付款。 是否可以做到這一點而又不會丟失數據?
這是您可以更改表格的方式
ALTER TABLE `phppos_sales_payments`
-- add a unique index based on the current primary key
ADD UNIQUE (`sale_id`,`payment_type`),
-- drop the current primary key
DROP PRIMARY KEY,
-- add the new identity column with autoincrement
ADD COLUMN `id` int(10) NOT NULL AUTO_INCREMENT FIRST,
-- set primary key to the new identity column
ADD PRIMARY KEY (`id`);
“魔術”是添加一個唯一的索引,因為外鍵必須具有索引,然后在第二位置添加具有自動增量的新標識列,並一次性設置該列的主鍵。
只需保留您的sale_id,payment_type密鑰(而不是主密鑰),然后添加一個id INT NOT NULL AUTO_INCREMENT
並使其成為主密鑰:不會丟失任何信息和新的主密鑰。
您需要執行一個ALTER TABLE語句來實現此目的:
ALTER TABLE `table` DROP PRIMARY KEY,
ADD COLUMN id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST,
ADD UNIQUE sale_id_payment_type( sale_id, payment_type );
ALTER TABLE `table` DROP PRIMARY KEY,
ALTER TABLE `table` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT FIRST
ALTER TABLE `table` ADD PRIMARY KEY (id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.