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

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

如果缺少drop tablecreate table指令怎么办?

最佳答案

auto_increment列的数据保持不变。

尝试对单个表执行mysqldump并查看如何插入列。

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

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

mysql>使用测试
数据库已更改
mysql>创建表tb(名称char(10),id int不为null auto_increment主键)ENGINE = MyISAM;
查询正常,受影响的0行(0.13秒)

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

MySQL的>选择*从TB;
+ -------- + ---- +
|名称| id |
+ -------- + ---- +
|约翰| 1 |
|玛丽| 2 |
|约瑟夫3 |
+ -------- + ---- +
设置3行(0.03秒)

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

如果存在则删除表tb;
/ *!40101 SET @saved_cs_client = @@ character_set_client /;
/!40101 SET character_set_client = utf8 * /;
创建表tb
  name char(10)默认为空,
  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的数据
-

锁定表tb写;
/ *!40000 ALTER TABLE tb禁用键/;
插入tb值('John',1),('Mary',2),('Joseph',3);
/!40000更改表tb启用键/;
解锁表;
/!40103 SET TIME_ZONE = @ OLD_TIME_ZONE * /;

试试看 !!!

关于mysql - 如果将转储文件加载到具有auto_increment列的表中,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5668817/

10-12 19:56