如果将转储文件加载到带有auto_increment列的表中,会发生什么?

时间:2011-04-14 19:48:13

标签: mysql mysqldump

假设我有一个reports表,其中id int auto_increment列用作主键。

如果我mysqldump将此表添加到添加了drop tablecreate table指令的文件中,然后将其加载到另一个数据库B中,就像A但是缺少一些最新的reports条记录,数据库B最终是否具有数据库A的reports表的精确副本?

如果缺少drop tablecreate table说明怎么办?

3 个答案:

答案 0 :(得分:0)

auto_increment列的数据保持原样。

尝试对单个表执行mysqldump并查看列的插入方式。

另请注意,每个表的表定义保留下一个auto_increment值,而先前的值包含在VALUES列表中。这是一个示例:

的MySQL>创建数据库测试;
查询正常,1行受影响(0.06秒)

的MySQL>使用测试
数据库改变了 MySQL的> create table tb(name char(10),id int not null auto_increment primary key)ENGINE = MyISAM;
查询OK,0行受影响(0.13秒)

的MySQL>插入tb(名称)值('John'),('Mary'),('Joseph');
查询OK,3行受影响(0.05秒)
记录:3个重复:0警告:0

的MySQL>从tb中选择*;
+ -------- + ---- +
|名字| id |
+ -------- + ---- +
|约翰| 1 |
|玛丽| 2 |
|约瑟夫| 3 |
+ -------- + ---- +
3行(0.03秒)

我执行了测试数据库的mysqldump,这是它产生的内容:

DROP TABLE IF EXISTS tb;
/ *!40101 SET @saved_cs_client = @@ character_set_client /;
/
!40101 SET character_set_client = utf8 * /;
CREATE TABLE tb
  name char(10)DEFAULT NULL,
  id int(11)NOT NULL AUTO_INCREMENT,
  主要关键(id
)ENGINE = MyISAM AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;
/ *!40101 SET character_set_client = @saved_cs_client * /;

-
- 转储表tb的数据
-

LOCK TABLES tb WRITE;
/ *!40000 ALTER TABLE tb DISABLE KEYS /;
插入tb VALUES('John',1),('Mary',2),('Joseph',3);
/
!40000 ALTER TABLE tb ENABLE KEYS /;
解锁表;
/
!40103 SET TIME_ZONE = @ OLD_TIME_ZONE * /;

试一试!!!

答案 1 :(得分:0)

如果你使用mysqldump。 create table定义将AUTO_INCREMENT值设置为转储发生时的值。导入转储时,INSERT语句将指定要插入新表的值。

如果缺少drop / create table语句,则AUTO_INCREMENT值应为最后插入的记录为+ 1。

答案 2 :(得分:0)

如果您将NULL插入其中,则自动增量字段仅设置自动值 否则他们接受你投入的价值。

(前提是没有其他限制可以防止这种情况发生,例如uniqueprimary密钥等。