mysqldump和autoincrement以及插入值

时间:2013-12-03 23:01:33

标签: mysql

我正在查看生成的mysqldump文件并发现奇怪的事情。创建表时的AUTO_INCREMENT是2.第一个插入使用1.在数据库中插入低于自动增量值的值有什么不对吗?

DROP TABLE IF EXISTS `phppos_locations`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `phppos_locations` (
  `location_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(60) COLLATE utf8_unicode_ci DEFAULT '',
  `address` tinytext COLLATE utf8_unicode_ci,
  `phone` varchar(30) COLLATE utf8_unicode_ci DEFAULT '',
  `fax` varchar(30) COLLATE utf8_unicode_ci DEFAULT '',
  `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT '',
  `receive_stock_alert` int(1) DEFAULT '0',
  `stock_alert_email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `return_policy` text COLLATE utf8_unicode_ci,
  `timezone` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `mailchimp_api_key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `enable_credit_card_processing` int(1) DEFAULT NULL,
  `merchant_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `merchant_password` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `default_tax_1_rate` decimal(15,3) DEFAULT NULL,
  `default_tax_1_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `default_tax_2_rate` decimal(15,3) DEFAULT NULL,
  `default_tax_2_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `default_tax_2_cumulative` int(1) DEFAULT '0',
  `deleted` int(1) DEFAULT '0',
  PRIMARY KEY (`location_id`),
  KEY `deleted` (`deleted`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `phppos_locations`
--

LOCK TABLES `phppos_locations` WRITE;
/*!40000 ALTER TABLE `phppos_locations` DISABLE KEYS */;
INSERT INTO `phppos_locations` VALUES (1,'Default','123 Nowhere street','555-555-5555','','admin@phppointofsale.com',NULL,NULL,'Test','America/New_York',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
/*!40000 ALTER TABLE `phppos_locations` ENABLE KEYS */;
UNLOCK TABLES;

2 个答案:

答案 0 :(得分:1)

http://dev.mysql.com/doc/refman/5.1/en/create-table.html

复制

整数或浮点列可以具有附加属性AUTO_INCREMENT。将值NULL(推荐)或0插入索引的AUTO_INCREMENT列时,该列将设置为下一个序列值。通常,这是值+ 1,其中value是表中当前列的最大值。 AUTO_INCREMENT序列以1开头。

这意味着如果您插入非NULL或0,将保留您插入的内容

答案 1 :(得分:0)

AUTO_INCREMENT语句中的CREATE TABLE值表示MySQL打算用于该表上下一个插入的自动增量值,截至您转储模式的时间。由于当时表中有一行,并且它的自动增量值为1,因此2是下一个预期值是有意义的。

由于insert显式地将location_id设置为1,因此它不会对该行使用自动增量。