我尝试更新已存储在表格中的值,并且我已实现了自动递增的主键列,以便我可以按编号引用特定的行(建议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列,它仍然有效。
答案 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
首先,主键中的值不能重复