MySQL auto_increment
У меня есть этот стол
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 ответа
Проблема была в том,
ОСНОВНОЙ КЛЮЧ (zipcode
,CityAliasName
,ID
)
Это должно было быть,
ОСНОВНОЙ КЛЮЧ (ID
)
Как только я изменил это, И удалил поле ID из вставки, я получил ожидаемые результаты.
Попробуйте удалить "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;
Вы должны добавить это:
PRIMARY KEY ON ID COLUMN AND AUTOINCREMENT
Да, определение первичного ключа является ключом. Как говорится в MySQL документах:
Для таблиц MyISAM и BDB вы можете указать AUTO_INCREMENT для вторичного столбца в индексе из нескольких столбцов. В этом случае сгенерированное значение для столбца AUTO_INCREMENT рассчитывается как MAX(auto_increment_column) + 1 префикс WHERE = данный префикс. Это полезно, когда вы хотите поместить данные в упорядоченные группы.
Вероятно, ваш идентификатор получил неуникальные значения перед тем, как исправить первичный ключ.