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