假设我有一个reports
表,其中的id
int auto_increment列用作主键。
如果我将此表mysqldump
放入添加了drop table
和create table
指令的文件中,然后将其加载到另一个数据库B中,该数据库与A一样,但是缺少一些最新的reports
记录,数据库B是否会最终得到数据库A的reports
表的精确副本?
如果缺少drop table
和create 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/