假设我有一个reports
表,其中id
int auto_increment列用作主键。
如果我mysqldump
将此表添加到添加了drop table
和create table
指令的文件中,然后将其加载到另一个数据库B中,就像A但是缺少一些最新的reports
条记录,数据库B最终是否具有数据库A的reports
表的精确副本?
如果缺少drop table
和create table
说明怎么办?
答案 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
插入其中,则自动增量字段仅设置自动值
否则他们接受你投入的价值。
(前提是没有其他限制可以防止这种情况发生,例如unique
,primary
密钥等。