MySQL自动增量

MySQL自动增量,mysql,auto-increment,Mysql,Auto Increment,我有一个带有自动递增字段的表,但我需要将该表转移到另一个数据库上的另一个表。字段1的值是否为1,字段2的值是否为2,依此类推 此外,如果数据库损坏,我需要恢复数据,自动增量会以某种方式产生效果吗?价值会改变吗?(例如,如果第一行,id(auto inc)=1,name=john,country=UK….id字段会保持1吗?)我这样问是因为如果其他表引用此值,如果此字段更改,则所有数据都将不同步。SELECT INTO应该在目标表上保持相同的id SELECT INTO应在目标表上保留相同的ID

我有一个带有自动递增字段的表,但我需要将该表转移到另一个数据库上的另一个表。字段1的值是否为1,字段2的值是否为2,依此类推


此外,如果数据库损坏,我需要恢复数据,自动增量会以某种方式产生效果吗?价值会改变吗?(例如,如果第一行,id(auto inc)=1,name=john,country=UK….id字段会保持1吗?)我这样问是因为如果其他表引用此值,如果此字段更改,则所有数据都将不同步。

SELECT INTO应该在目标表上保持相同的id


SELECT INTO应在目标表上保留相同的ID


使用MySQL备份可以做到这一点,如果您创建自己的insert语句,请确保包含id字段并插入值(不像MSSQL那样需要设置identity\u insert),需要注意的是,如果生成DDL,它有时会为您的identity列生成“不正确的”(也就是说,它声明起始点是您的最后一个标识值?您可能不希望出现这种行为)。

使用MySQL备份可以做到这一点,如果您创建自己的insert语句,请确保包括您的id字段并插入该值(与MSSQL不同,您必须设置标识\u insert),需要注意的是,如果您生成DDL,它有时会为您的标识列生成“不正确的”(即,它声明起始点位于您的最后一个标识值?您可能不希望出现这种行为).

听起来您试图以相同的顺序将数据分别插入两个单独的数据库,并使用自动增量字段链接两行。您似乎基本上在问,如果数据以相同的顺序插入,是否可以依赖两个数据库中的自动增量相同

如果是这样,答案是否定的-你不能依赖这种行为。例如,自动递增跳过一个值是合法的

但也许你会问,一个自动增值在被写入和提交后会突然变为另一个值吗?不会——它们在将来不会改变(当然,除非你明确地改变它们)


这回答了你的问题吗?如果没有,也许你可以再解释一下你的问题。

听起来你在试图以相同的顺序将数据分别插入两个独立的数据库,并使用自动增量字段链接这两行。你似乎基本上在问,在bot中依赖自动增量是相同的可以吗h数据库,如果数据以相同的顺序插入

如果是这样,答案是否定的-你不能依赖这种行为。例如,自动递增跳过一个值是合法的

但也许你会问,一个自动增值在被写入和提交后会突然变为另一个值吗?不会——它们在将来不会改变(当然,除非你明确地改变它们)


这回答了您的问题吗?如果没有,也许您可以再次解释您的问题。

如果您完全指定自动增量值,那么传输数据不会有问题。MySQL允许您在自动增量字段中插入任何您想要的内容,但只有在插入的值为0或NULL时,才执行实际的自动增量。至少在我的5.0版MySQL上,它会根据您插入的内容自动调整自动增量值:

mysql> create table test (x int auto_increment primary key);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into test (x) values (10);
Query OK, 1 row affected (0.00 sec)
mysql> insert into test (x) values (null);
Query OK, 1 row affected (0.00 sec)
mysql> insert into test (x) values (0);   
Query OK, 1 row affected (0.00 sec)
mysql> insert into test (x) values (5);
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+
| x  |
+----+
| 5  | <--inserted '5' (#4)
| 10 | <--inserted '10' (#1)
| 11 | <--inserted 'null' (#2)
| 12 | <--inserted '0' (#3)
+----+
3 rows in set (0.00 sec)

如果完全指定自动增量值,则传输数据不会有问题。MySQL允许您在自动增量字段中插入任何需要的内容,但只有在插入的值为0或NULL时,才执行实际的自动增量。至少在我的5.0版MySQL上,它会自动将自动增量值调整为考虑您插入的内容:

mysql> create table test (x int auto_increment primary key);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into test (x) values (10);
Query OK, 1 row affected (0.00 sec)
mysql> insert into test (x) values (null);
Query OK, 1 row affected (0.00 sec)
mysql> insert into test (x) values (0);   
Query OK, 1 row affected (0.00 sec)
mysql> insert into test (x) values (5);
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+
| x  |
+----+
| 5  | <--inserted '5' (#4)
| 10 | <--inserted '10' (#1)
| 11 | <--inserted 'null' (#2)
| 12 | <--inserted '0' (#3)
+----+
3 rows in set (0.00 sec)