自动递增行ID

时间:2016-05-07 04:23:54

标签: mysql sql

我尝试更新已存储在表格中的值,并且我已实现了自动递增的主键列,以便我可以按编号引用特定的行(建议here

使用...

ALTER TABLE taxipassengers ADD COLUMN rid INT NOT NULL AUTO_INCREMENT PRIMARY KEY

我遇到的问题是,当我插入与以前相同的数据时,我现在得到Column count doesn't match value count at row 1。它希望我给它一个PK值。如果我删除带有PK的列,则错误消失,我将回到原点。

我错过了什么吗?

编辑:这里是插入声明

INSERT INTO taxipassengers SELECT a.post_date, b.vendor_name, c.lastName, d.firstName, null as taxiGroup
FROM (select ID,post_date from wp_posts where post_type = 'shop_order') a, 
(SELECT order_id,vendor_name FROM wp_wcpv_commissions) b, 
(SELECT post_id,meta_value as lastName FROM wp_postmeta where meta_key ='_billing_last_name') c, 
(SELECT post_id,meta_value as firstName FROM wp_postmeta WHERE meta_key ='_billing_first_name') d 
WHERE a.ID = b.order_id and b.order_id=c.post_id and c.post_id = d.post_id;

请注意,插入语句在实现PK列之前有效,如果我删除PK列,它仍然有效。

2 个答案:

答案 0 :(得分:1)

可能您正在使用此语法插入行

INSERT INTO mytable VALUES (1, 'abc', 'def');

INSERT syntax from MySQL manual

  

语句提供值的列可以指定如下:

     
      
  • 如果没有为INSERT ... VALUES或INSERT ... SELECT指定列名列表,则表中每列的值必须由VALUES列表或SELECT语句提供。如果您不知道表中列的顺序,请使用DESCRIBE tbl_name查找。
  •   

您必须在INSERT查询中添加新列。对于自动增量列,可以插入列NULL以生成新值。默认情况下,您的专栏会被添加到最后一位(如果您未在ALTER TABLE中使用AFTER)。

  

要在表格行中的特定位置添加列,请使用FIRST或AFTER col_name。默认是最后添加列。您还可以在CHANGE或MODIFY操作中使用FIRST和AFTER来重新排序表中的列。

所以,现在你的INSERT必须如此:

INSERT INTO mytable VALUES (1, 'abc', 'def', NULL); -- use NULL for autoincrement

INSERT INTO mytable (col1, col2, col3) VALUES (1, 'abc', 'def'); -- or add column names

答案 1 :(得分:0)

首先检查您的数据库是否允许可变PK,或者更喜欢稳定的PK。

请仔细阅读以下文章,我相信你会发现错误。 http://rogersaccessblog.blogspot.in/2008/12/what-is-primary-key.html

首先,主键中的值不能重复

Can we update primary key values of a table?