2016-05-07 4 views
0

Я пытаюсь обновить значения, уже сохраненные в таблице, и я внедрил автоматически увеличивающий столбец первичного ключа, чтобы я мог ссылаться на определенные строки по числу (как рекомендовано here).Auto-incrementing row ID

, используя ...

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

Проблема я бегу в том, что, хотя теперь я получаю Column count doesn't match value count at row 1 когда я вставляю те же данные, как и раньше. Это похоже на то, что я хочу, чтобы я дал ему значение для ПК. Если я удалю столбец с PK, ошибка исчезнет, ​​и я вернусь к квадрату.

Я что-то упустил?

EDIT: Вот вставка заявление

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

Что делает ваш 'INSERT' выглядеть? – tadman

+0

У вас есть ошибка в вашем заявлении вставки, можете ли вы показать это? –

+0

Абсолютно! Я был бы счастлив. (Обновлено) – Tim

ответ

1

Возможно, вы используете этот синтаксис для вставки строк

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

INSERT syntax from MySQL manual

Столбцы, для которых оператор предоставляет значения могут быть определены следующим образом:

  • Если не указать список имен столбцов для INSERT ... VALUES или INSERT ... SELECT, значения для каждого столбца таблица должна быть предоставлена ​​списком VALUES или SELECT. Если вы не знаете порядок столбцов в таблице, используйте DESCRIBE tbl_name, чтобы узнать.

Вы должны добавить новый столбец в INSERT запроса. Для автоинкремента столбца NULL можно вставить для генерации нового значения. И ваша колонка будет добавлена ​​последним по умолчанию (если вы не используете AFTER в ALTER TABLE).

Чтобы добавить столбец в определенную позицию в строке таблицы, используйте FIRST или AFTER col_name. По умолчанию добавляется последний столбец. Вы также можете использовать операции FIRST и AFTER в CHANGE или MODIFY для изменения порядка столбцов в таблице.

Итак, теперь ваш 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 
+0

Благодарим вас за отзыв! Я ценю ваше время. Если я добавлю нуль в оператор вставки, где будет соответствующее значение столбца, я получаю 'Данные слишком длинны для столбца 'taxiGroup' в строке 1', который является столбцом, ранее предшествующим PK. Кроме того, я изначально пытался использовать 'values', но он продолжал метать ошибки, пока я не понял это. Любые другие мысли? – Tim

+0

Вы можете показать полный запрос? Это может помочь решить вашу проблему. – Andrew

+0

Это странно. Я удалил все в таблице и снова попытался, и все прошло без проблем (добавив «нуль», как вы сказали). Weird. Но спасибо! Очень признателен. Это определенно противоречит интуиции, так как PK не имеет значения NULL. – Tim

0

Сначала проверьте, разрешена ли ваша база данных изменчивым PK или предпочитает стабильную PK.

Прочтите ниже статьи, я уверен, что вы поймете, что происходит не так. http://rogersaccessblog.blogspot.in/2008/12/what-is-primary-key.html

Во-первых, значение первичного ключа не могут быть продублированы

Can we update primary key values of a table?

+0

Большое спасибо за ваш вклад. Я очень ценю ваше время. Теперь я понимаю разницу, но как узнать, может ли db использовать изменяемые PK? – Tim