MySQL auto_increment - PullRequest
       8

MySQL auto_increment

0 голосов
/ 02 августа 2010

У меня есть эта таблица

CREATE TABLE `zipcodes2` (
  `ID` int(11) NOT NULL auto_increment,
  `zipcode` int(6) NOT NULL default '0',
  `State` char(3) NOT NULL default '',
  `zip_name` varchar(255) NOT NULL default '',
  `CityAliasName` varchar(255) NOT NULL default '',
  `latitude` float(26,7) NOT NULL default '0.0000000',
  `longitude` float(36,7) NOT NULL default '0.0000000',
  `AreaCode` smallint(3) NOT NULL default '0',
  `County` varchar(255) NOT NULL default '',
  `TimeZone` smallint(3) NOT NULL default '0',
  `DayLightSavings` char(2) NOT NULL default '',
  PRIMARY KEY  (`zipcode`,`CityAliasName`,`ID`),
  KEY `CityAliasName` (`CityAliasName`),
  KEY `State` (`State`),
  KEY `index_by_zipcode` (`zipcode`),
  KEY `index_by_state` (`State`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

И я пытаюсь вставить в эту таблицу другую таблицу.Проблема в том, что поле auto_increment не увеличивается.Что я делаю не так?

insert into zipcodes2 (ID,zipcode,state,zip_name,CityAliasName,latitude,longitude, AreaCode, County, TimeZone, DayLightSavings)
select distinct null,ZipCode as zipcode,State as state,City as zip_name, CityAliasName, Latitude as latitude, Longitude as longitude, AreaCode
, County, TimeZone, DayLightSavings
from zip_codes_all  
where state NOT in ('PR', 'AE', 'PW', 'MP', 'GU', 'FM', 'AS','AP', 'AA','FM','GA','GU','FM')
limit 0,10;

Ответы [ 4 ]

0 голосов
/ 08 октября 2012

Вы должны добавить это:

PRIMARY KEY ON ID COLUMN AND AUTOINCREMENT 
0 голосов
/ 02 августа 2010

Проблема была,

ПЕРВИЧНЫЙ КЛЮЧ (zipcode, CityAliasName, ID)

Так и должно было быть,

ПЕРВИЧНЫЙ КЛЮЧ (ID)

Как только я изменил это, И удалил поле ID из вставки, я получил ожидаемые результаты.

0 голосов
/ 02 августа 2010

Да, определение первичного ключа является ключом. Как говорится в MySQL документах:

Для таблиц MyISAM и BDB вы можете укажите AUTO_INCREMENT на вторичном столбец в индексе из нескольких столбцов. В в этом случае сгенерированное значение для Столбец AUTO_INCREMENT рассчитывается как MAX (auto_increment_column) + 1 ГДЕ Префикс = дано-префикс. Это полезно когда вы хотите поместить данные в порядок группы.

Вероятно, ваш идентификатор получил неуникальные значения перед исправлением первичного ключа.

0 голосов
/ 02 августа 2010

Попробуйте удалить 'ID' из запроса:

insert into zipcodes2 (zipcode,state,zip_name,CityAliasName,latitude,longitude, AreaCode, County, TimeZone, DayLightSavings)
select distinct ZipCode as zipcode,State as state,City as zip_name, CityAliasName, Latitude as latitude, Longitude as longitude, AreaCode, County, TimeZone, DayLightSavings
from zip_codes_all  
where state NOT in ('PR', 'AE', 'PW', 'MP', 'GU', 'FM', 'AS','AP', 'AA','FM','GA','GU','FM')
limit 0,10;
...