簡體   English   中英

遷移主鍵以使用AUTO_Increment

[英]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`);

“魔術”是添加一個唯一的索引,因為外鍵必須具有索引,然后在第二位置添加具有自動增量的新標識列,並一次性設置該列的主鍵。

SQL小提琴演示

只需保留您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM