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

问题描述

| 假设我有一个
reports
表,其中有一个
id
int auto_increment列用作主键。 如果我将该表“ 2”放入添加了“ 3”和“ 4”指令的文件中,然后将其加载到另一个数据库B中,该数据库与A一样,但缺少一些最新的“ 0”记录,那么数据库B是否会以数据库的精确副本结尾A的
reports
桌子? 如果缺少“ 3”和“ 4”指令怎么办?     

解决方法

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,这是它产生的结果: 如果存在OP9ѭ,则删除表; / *!40101 SET @saved_cs_client = @@ character_set_client /; /!40101 SET character_set_client = utf8 * /; 创建表
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
的数据 - LOCK9ѭ写; / *!40000 ALTER TABLE
tb
禁用键/; 插入
tb
值(\'John \',1),(\'Mary \',2),(\'Joseph \',3); /!40000 ALTER TABLE
tb
启用键/; 解锁表; /!40103 SET TIME_ZONE = @ OLD_TIME_ZONE * /; 试试看 !!!     ,如果使用mysqldump。无论发生转储时,创建表定义都会将AUTO_INCREMENT值设置为任何值。导入转储时,INSERT语句将指定要插入到新表中的值。 如果缺少drop / create table语句,则AUTO_INCREMENT值应为最后插入的记录为+ 1。     ,仅当您向其中插入“ 19”时,“自动增量”字段才会设置自动值。 否则,他们会接受您输入的价值。 (只要没有其他限制可以防止这种情况发生,例如
unique
primary
键等)。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...