我有一张表,主键是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
。原因是我想单独跟踪相同类型的付款。是否可以在不丢失数据的情况下执行此操作?
答案 0 :(得分:3)
这是你改变你的表格的方法
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`);
“魔术”是添加唯一索引,因为外键必须有索引,然后在第二位添加带有自动增量的新标识列,并一次性设置该列的主键。
答案 1 :(得分:1)
只需保留您的sale_id,payment_type密钥,但不要保留为主密钥,然后添加id INT NOT NULL AUTO_INCREMENT
并将其设为主键:不丢失信息和新主键。
答案 2 :(得分:1)
您需要执行单个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 );
答案 3 :(得分:0)
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)